多站点WordPress在Nginx中重写规则

时间:2010-08-16 07:17:38

标签: nginx mod-rewrite wordpress

我正在尝试使用WordPress和Nginx运行多域博客安装。最后一步是在网络服务器的.htaccess(仅限apache)中配置一些重写规则。如何将其转换为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 个答案:

答案 0 :(得分:9)

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;
    }
}

答案 1 :(得分:3)

重写后,上面缺少一个空格^。 / files /(.(html | jpg | .......你需要在$之后和之前的空格/ wp-includes /ms-files.php。干杯!

答案 2 :(得分:1)

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

但是我发现里面的一个小虫浪费了我好几个小时,如下: 如果静态网址包含.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'错误!

答案 3 :(得分:0)

而不是:

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

将其更改为:

location ~ .php$

允许它指示

blog.com/wp-admin

blog.com/wp-admin/