Apache仅重定向查询的一部分

时间:2018-09-24 16:47:57

标签: regex apache url-rewriting url-redirection http-status-code-301

我正在尝试将查询字符串重定向到非查询URL。看起来像这样。

原始 http://searchtest.help.org/search?client=Cool_Sub&site=Cool_Sub&proxystylesheet=Cool_Sub&q=stackoverflow

预期结果 https://searchtest.help.org/cool-search/stackoverflow

我只想获取查询的最后一部分。在这种情况下 stackoverflow

这部分永远是静态的。

  

search?client = Cool_Sub&site = Cool_Sub&proxystylesheet = Cool_Sub&q =

我正在我的apache虚拟主机中使用它

RewriteEngine On

RewriteCond %{REQUEST_URI} ^\/search$

RewriteCond %{QUERY_STRING} ^client=Cool_Sub&site=Cool_Sub&proxystylesheet=Cool_Sub&q=(.*)

RewriteRule ^(.*)$ https://searchtest.help.org/cool-search/%1 [R=301,L]

但是结果是 https://searchtest.help.org/cool-search/stackoverflow?client=Cool_Sub&site=Cool_Sub&proxystylesheet=Cool_Sub&q=stackoverflow

我尝试了上述规则的许多变体,但没有骰子。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

QSD标志添加到您的RewriteRule

RewriteRule ^(.*)$ https://searchtest.help.org/cool-search/%1 [R=301,QSD,L]

根据Apache 2.4文档:

  

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