代码之家  ›  专栏  ›  技术社区  ›  jdelard

nginx多站点wordpress重写规则

  •  7
  • jdelard  · 技术社区  · 16 年前

    我正在尝试用WordPress和nginx运行一个多域博客安装。最后一步是在 .htaccess (仅限Apache)用于Web服务器。如何将其转换为nginx重写规则?

    RewriteEngine On
    RewriteBase /
    
    RewriteRule ^index\.php$ - [L]
    
    # uploaded files
    RewriteRule ^files/(.+) wp-includes/ms-files.php?file=$1 [L]
    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^ - [L]
    RewriteRule . index.php [L]
    
    4 回复  |  直到 16 年前
        1
  •  9
  •   Chuck    14 年前

    nginx rewrite rules example for Wordpress 3 :

    server{
        server_name *.example.com;  
        listen 80;
        #on server block
        ##necessary if using a multi-site plugin
        server_name_in_redirect off;
        ##necessary if running Nginx behind a reverse-proxy
        port_in_redirect off;
        access_log /var/log/nginx/example-com-access.log;
    
        location / {
            root   /var/www/example.com/wordpress;
            index  index.html index.htm index.php;
            rewrite ^.*/files/(.*)$ /wp-includes/ms-files.php?file=$1 last;
            if (!-e $request_filename) {
                rewrite ^.+/?(/wp-.*) $1 last;
                rewrite ^.+/?(/.*\.php)$ $1 last;
                rewrite ^(.+)$ /index.php?q=$1 last;
            }
        }
    
        location ~* ^.+\.(html|jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js)$
        {
            root /var/www/example.com/wordpress;
            rewrite ^/.*(/wp-.*/.*\.(html|jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js))$ $1 last;
            rewrite ^.*/files/(.*(html|jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js))$ /wp-includes/ms-files.php?file=$1 last;
            expires 30d;
            break;
        }
    
        location ~ wp\-.*\.php|wp\-admin|\.php$ {
            include /etc/nginx/fastcgi_params;
            fastcgi_pass  127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param  SCRIPT_FILENAME  /var/www/example.com/wordpress$fastcgi_script_name;
        }
    }
    
        2
  •  3
  •   Kirk    16 年前

    上面在重写后缺少一个空格^。 /文件/ (HTML JPG…….在$wp includes/ms-files.php之后和之前需要一个空格。干杯!

        3
  •  1
  •   yixian    10 年前

    这个nginx为wordpress重写的规则完美地解决了我的问题,包括将ex.com/wp-admin改为ex.com/wp-admin/。

    但我发现里面有一个虫子浪费了我几个小时,如下所示 如果静态URL包括 .html 就像 /%category%/%post_id%.html ,你必须学会:

    location ~* ^.+\.(html|jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js)$
        {
            root /var/www/example.com/wordpress;
            rewrite ^/.*(/wp-.*/.*\.(html|jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js))$ $1 last;
            rewrite ^.*/files/(.*(html|jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js))$ /wp-includes/ms-files.php?file=$1 last;
            expires 30d;
            break;
        }

    把它改成:

    location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js)$
        {
            root /var/www/example.com/wordpress;
            rewrite ^/.*(/wp-.*/.*\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js))$ $1 last;
            rewrite ^.*/files/(.*(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js))$ /wp-includes/ms-files.php?file=$1 last;
            expires 30d;
            break;
        }

    或者,在内容页中出现“404 page not found”错误!

        4
  •  0
  •   Ingo Karkat    13 年前

    而不是:

    location ~ wp\-.*\.php|wp\-admin|\.php$ {
    

    把它改成:

    location ~ .php$
    

    允许它直接

    blog.com/wp-admin
    

    blog.com/wp-admin/