【问题标题】:mod_rewrite rule won't work when matching GET parameters匹配 GET 参数时 mod_rewrite 规则不起作用
【发布时间】:2013-06-09 16:02:05
【问题描述】:

我有这个 RewriteRule:

RewriteRule ^wiki/search[.php]*?q=(.*)$ /wiki/search/$1 [R]

试图将 /wiki/search?q=search_query 格式重写为 /wiki/search/search_query ,然后使用

RewriteRule ^wiki/search/(.*)$ /wikisearch.php?id=$1 [L]

但是 .. 只要我在第一条规则中有 ?q=,它就根本不起作用,而只会给我留下 404 错误。 :(
为什么是这样?改写规则什么的不能用GET参数吗?

【问题讨论】:

    标签: regex apache mod-rewrite


    【解决方案1】:

    您可以read in the docsRewriteRule 仅适用于“URL-path”,不包括查询字符串:

    在第一个 RewriteRule 上,它与请求的 (%-decoded) URL 路径(或文件路径,取决于上下文)匹配。后续模式与最后匹配的 RewriteRule 的输出相匹配。

    要匹配查询字符串,您可以使用RewriteCond,然后在以下重写规则中使用%0%1...%9 引用匹配和组。

    RewriteCond %{QUERY_STRING} \bq=([^&]+)
    RewriteRule ^wiki/search(?:\.php)?$ /wiki/search/%1
    

    另一方面,你正在做的事情看起来很丑陋,我建议你避免这种无用的外部重定向 ([R])。在没有外部重定向的情况下重写到所需的 URL,或者更好地处理应用程序/脚本中的所有查询字符串修改。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-27
      • 1970-01-01
      • 2020-08-29
      • 1970-01-01
      • 2019-12-14
      • 1970-01-01
      相关资源
      最近更新 更多