【问题标题】:Apache rewrite to Nginx rewrite. QSA issues. How to convert properly?Apache 重写为 Nginx 重写。 QSA 问题。如何正确转换?
【发布时间】:2013-04-03 02:25:04
【问题描述】:

我现在有这个规则:

 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?

【问题讨论】:

    标签: .htaccess mod-rewrite nginx rewrite


    【解决方案1】:

    与 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
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-19
    • 1970-01-01
    • 1970-01-01
    • 2018-05-06
    • 2012-01-29
    • 2016-06-18
    • 2014-11-10
    相关资源
    最近更新 更多