知道为什么这个正则表达式不起作用?

时间:2016-04-05 19:21:45

标签: regex apache

我在.htaccess中使用以下代码

RewriteEngine on
RewriteCond %{QUERY_STRING} (?:^|&)prod=\d+(?:&|$) [NC]
RewriteRule ^dumbwaiters/proddetail\.php\?* https://www.example.com/dumbwaiters/compare-dumbwaiters/  [NC,R=301,L]

重定向到:

https://www.example.com/dumbwaiters/compare-dumbwaiters/?prod=143

但我不想尾随?/ prod = 143

知道我做错了吗?

1 个答案:

答案 0 :(得分:0)

http://httpd.apache.org/docs/current/rewrite/flags.html#flag_qsd

  

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

     

此标志在2.4.0及更高版本中可用。

因此,如果您的Apache版本足够,我认为以下未经测试的代码可以正常工作:

RewriteRule ^dumbwaiters/proddetail\.php.*  https://www.example.com/dumbwaiters/compare-dumbwaiters/  [QSD,NC,R=301,L]