Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex Apache2:重写包含问号的url_Regex_Apache_Mod Rewrite_Url Rewriting - Fatal编程技术网

Regex Apache2:重写包含问号的url

Regex Apache2:重写包含问号的url,regex,apache,mod-rewrite,url-rewriting,Regex,Apache,Mod Rewrite,Url Rewriting,我使用的是apache2.4.7。我使用mod_rewrite修改一些URL 我想重写http://example.com/servicename/oldpage?id=abc至http://example.com/servicename/newpage 其他类似的重写也能起作用,所以我相信url中的?会引起问题。 我已尝试使用\来转义它 这是因为url中没有?: RewriteRule^/servicename/old/servicename/new 但这些都不起作用: RewriteRule

我使用的是
apache2.4.7
。我使用
mod_rewrite
修改一些URL

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

其他类似的重写也能起作用,所以我相信url中的
会引起问题。 我已尝试使用
\
来转义它

这是因为url中没有

RewriteRule^/servicename/old/servicename/new

但这些都不起作用:

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

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

我也尝试过使用类似这样的例子中的
RewriteCond
:但我没有成功地让它们工作

应该如何重写包含问号的url


编辑:我尝试了中给出的解决方案,但无法使它们对我起作用。这个问题是关于在重写时保留查询字符串,而我想在重写时删除它。

重写规则模式与URL中主机名和端口之后、查询字符串之前的部分相匹配

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

因此,这应该是可行的:

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

您希望重写依赖于
id=
查询字符串的内容,还是只需要从发送到newpage的请求中删除它?我希望删除它,而不关心它的内容。的可能重复