2013-04-11 75 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