2013-04-11 78 views
1

我有现在这样的规则:Apache重写为Nginx重写。 QSA问题。如何正确转换?

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的?

回答

0

与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; 
} 
+0

随着我的代码索引工作,但我现在也得到了404的索引:S – wintercounter 2013-04-11 02:27:23