.htaccess Apache重写到Nginx重写。QSA问题。如何正确转换?
我现在有一条规则:.htaccess Apache重写到Nginx重写。QSA问题。如何正确转换?,.htaccess,mod-rewrite,nginx,rewrite,.htaccess,Mod Rewrite,Nginx,Rewrite,我现在有一条规则: RewriteRule ^/mp3/(.*)$ /music/$1 [L,R=301] RewriteRule ^/activate/(.*) /index.php?p=activate.php&hash=$1 [QSA] RewriteRule ^(.*)/([0-9]+)/(.*)$ index.php?p=$1&id=$2&page=$2 [QSA] RewriteRule ^(.*)/([0-9]+)$ index.php?p=$1&a
RewriteRule ^/mp3/(.*)$ /music/$1 [L,R=301]
RewriteRule ^/activate/(.*) /index.php?p=activate.php&hash=$1 [QSA]
RewriteRule ^(.*)/([0-9]+)/(.*)$ index.php?p=$1&id=$2&page=$2 [QSA]
RewriteRule ^(.*)/([0-9]+)$ index.php?p=$1&id=$2&page=$2 [QSA]
RewriteRule ^(.*)/$ index.php?p=$1 [QSA]
但转到Nginx,我已经创建了这些规则,但现在正在工作,我只得到404:
location / {
rewrite ^/mp3/(.*) /music/$1 permanent;
rewrite ^/activate/(.*) /index.php?p=activate.php&hash=$1 permanent;
rewrite ^(.*)/([0-9]+)/(.*)$ index.php?p=$1&id=$2&page=$2 break;
rewrite ^(.*)/([0-9]+)$ index.php?p=$1&id=$2&page=$2 break;
rewrite ^(.*)/$ index.php?p=$1 break;
}
如何将QSA规则转换为Nginx?与apache的mod_rewrite不同,您可以在Nginx的rewrite命令中匹配查询字符串。所以你想要的是:
location / {
rewrite ^/mp3/(.*) /music/$1 permanent;
rewrite ^/activate/([^\?]*)(?:\?(.*))? /index.php?p=activate.php&hash=$1&$2 permanent;
rewrite ^(.*)/([0-9]+)/([^\?]*)(?:\?(.*))?$ index.php?p=$1&id=$2&page=$2&$3 break;
rewrite ^(.*)/([0-9]+)(?:\?(.*))?$ index.php?p=$1&id=$2&page=$2&$3 break;
rewrite ^(.*)/(?:\?(.*))?$ index.php?p=$1&$2 break;
}
我的代码索引可以正常工作,但现在索引也可以得到404:S