Apache2:重写包含问号

时间:2016-05-30 11:00:11

标签: regex apache mod-rewrite url-rewriting

我正在使用Apache 2.4.7。我使用mod_rewrite来改变一些网址。

我想将http://example.com/servicename/oldpage?id=abc重写为http://example.com/servicename/newpage

其他类似的重写工作,所以我相信内部网址?导致问题。 我尝试用\转义它。

这可行,因为url中没有?

RewriteRule ^/servicename/old /servicename/new

但这些不起作用:

RewriteRule ^/servicename/oldpage?id=abc /servicename/newpage

RewriteRule ^/servicename/oldpage\?id=abc /servicename/newpage

我也尝试使用RewriteCond这样的示例:.htaccess rewrite URL with a question mark "?"但我没有设法让它们发挥作用。

如何重写包含问号的网址?

编辑:我尝试了Match Question Mark in mod_rewrite rule regex中提供的解决方案,但无法让它们为我工作。这个问题是关于在重写时保留查询字符串,而我想在重写时将其删除。

1 个答案:

答案 0 :(得分:1)

RewriteRule模式与主机名和端口之后以及查询字符串之前的URL部分匹配。

当请求的URI包含查询字符串,而目标URI不包含时,RewriteRule的默认行为是将该查询字符串复制到目标URI。使用[QSD]标志会导致查询字符串被丢弃。

所以,这应该有效:

RewriteRule ^/servicename/oldpage /servicename/newpage [QSD]