2016-05-30 115 views
1

我正在使用Apache 2.4.7。我使用mod_rewrite来改变一些网址。我想将http://example.com/servicename/oldpage?id=abc改写为http://example.com/servicename/newpageApache2:重写包含问号的网址

其他类似的改写所以我相信?里面的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给出的解决方案,但无法让他们为我工作。这个问题是关于重写时保留查询字符串,而我想在重写时删除它。

+0

你想重写依赖于'ID ='查询字符串的内容,或者你只是需要从请求发送到NEWPAGE删除吗? –

+0

我想将其删除,而不是关心其内容。 –

+0

[在mod \ _rewrite规则正则表达式中匹配问号]的可能重复(http://stackoverflow.com/questions/822421/match-question-mark-in-mod-rewrite-rule-regex) –

回答

1

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

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

所以,这应该工作:

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