使用URL参数时,redirect指令在.htaccess中被忽略

我有一个drupal附带的默认.htaccess文件。 为了将旧网站的外部链接页面redirect到新网页,我通常使用类似的语句

Redirect /foo http://www.example.com/bar 

这按预期工作。

但是看起来这个陈述完全被忽略了

 Redirect /index.php?x=y http://www.example.com 

并且该请求在.htaccess文件的末尾通过Drupal中的mod_rewrite规则运行。

你知道什么是问题吗?

问题

Redirect不匹配url参数,它只会匹配url的path

你可以使用RewriteCondRewriteRule匹配QueryStringvariables。 这里是一个工作(但未经testing)的片段,你可以尝试:

 RewriteCond %{QUERY_STRING} x=y RewriteRule ^index.php http://www.example.com [R=301] 

你应该注意一些这方面的事情:

  1. RewriteCond行真的是一个正则expression式(正则expression式) ,所以你将不得不转义任何你添加到它的特殊字符(如标点符号),第一个? 被省略,但是任何进一步的URL参数都必须包含&RewriteCond %{QUERY_STRING} x=y&a=b )。
  2. 此方法等同于Redirect ,因为我指定了HTTP状态码( HTTP 301redirect ,它是永久性的)。

积分

  • 我怎样才能匹配查询stringvariables与mod_rewrite? – 堆栈溢出