【问题标题】:How do I convert mod_rewrite (QSA option) to Nginx equivalent?如何将 mod_rewrite(QSA 选项)转换为 Nginx 等效项?
【发布时间】:2010-09-21 18:48:17
【问题描述】:

我希望将以下 mod_rewrite 规则转换为 Nginx equivalent

RewriteRule ^foo/(.*)$ /bar/index.php?title=$1 [PT,L,QSA]
RewriteRule ^foo/*$ /bar/index.php [L,QSA]

到目前为止我有:

rewrite ^foo/(.*)$ /bar/index.php?title=$1&$query_string last;
rewrite ^foo/?$ /bar/index.php?$query_string break;

问题是(我认为!)没有附加查询字符串。我还没有找到将QSA 参数移植到 Nginx 的方法。

【问题讨论】:

    标签: regex mod-rewrite nginx


    【解决方案1】:

    QSA 在 NGINX 中是自动的。

    如果你不想要它,添加 ?到新位置的尽头

    重写 ^/foo /bar/index.php?最后;

    【讨论】:

    • 这是正确的。文档(nginx.org/en/docs/http/ngx_http_rewrite_module.html)说:“如果替换字符串包含新的请求参数,则之前的请求参数将附加在它们之后。” (注意:“如果这是不希望的,在替换字符串的末尾放置一个问号可以避免附加它们”)
    【解决方案2】:

    这些重写规则使脚本工作:

    rewrite ^/foo/([^?]*)(?:\?(.*))? /bar/index.php?title=$1&$2;
    rewrite ^/foo /bar/index.php;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-06-11
      • 1970-01-01
      • 1970-01-01
      • 2013-02-02
      • 2012-07-19
      • 2018-12-07
      • 2011-01-27
      相关资源
      最近更新 更多