Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.htaccess Apache重写到Nginx重写。QSA问题。如何正确转换?_.htaccess_Mod Rewrite_Nginx_Rewrite - Fatal编程技术网

.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