Nginx rewrite rules

时间:2011-11-14 作者:boranb

我对WordPress的Nginx重写算法有一些问题。

我用它来重写,效果很好;

    server_name www.domain.com domain.com;
    if ($host != \'domain.com\') {
    rewrite ^/(.*)     http://domain.com/$1 permanent;
    } 
它生成此url;

http://domain.com/?author=1 
对此;

http://domain.com/author/username/
这很好,但有这样的url;

http://domain.com/?author=1&type=like
它成功了;

http://domain.com/author/username/?type=like
我没有收到任何错误,但查询不起作用。

我错过了什么?

2 个回复
最合适的回答,由SO网友:Chris_O 整理而成

WordPress的正确Nginx重写规则是:

location / {
        try_files $uri $uri/ /index.php?q=$uri&$args;
    }
这会通过索引发送所有内容。php并保持附加的查询字符串不变。

如果您正在运行PHP-FPM,您还应该在fastcgi\\u参数之前添加以下内容作为安全措施:

location ~ \\.php {
        try_files $uri =404;
        
      //  fastcgi_param ....
      //  fastcgi_param ....
      
      fastcgi_pass 127.0.0.1:9000;
}

SO网友:Steffan

请注意& $uri之间的字符\'&\' $args非常重要,因为如果没有它,它将部分工作,但在某些情况下会失败。

Correct:

location / {
    try_files $uri $uri/ /index.php?q=$uri&$args;
}

Wrong:

location / {
    try_files $uri $uri/ /index.php?q=$uri$args;
}
错误的方法将处理多个参数:

https://example.com?myvar=xxx&secvar=xxx // Will work
但如果只通过一个参数,则失败:

https://example.com?myvar=xxx // Will NOT work
这让我很难找到拼写错误,但至少我学到了一些新东西^^

结束