我正在使用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中提供的解决方案,但无法让它们为我工作。这个问题是关于在重写时保留查询字符串,而我想在重写时将其删除。答案 0 :(得分:1)
RewriteRule模式与主机名和端口之后以及查询字符串之前的URL部分匹配。
当请求的URI包含查询字符串,而目标URI不包含时,RewriteRule的默认行为是将该查询字符串复制到目标URI。使用[QSD]标志会导致查询字符串被丢弃。
所以,这应该有效:
RewriteRule ^/servicename/oldpage /servicename/newpage [QSD]