Apache 仅重定向查询的一部分

Posted

技术标签:

【中文标题】Apache 仅重定向查询的一部分【英文标题】:Apache redirect only part of a query 【发布时间】:2019-02-28 05:43:14 【问题描述】:

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

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

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

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

这部分将永远是静态的。

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

我在我的 apache vhost 中使用它

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/***?client=Cool_Sub&site=Cool_Sub&proxystylesheet=Cool_Sub&q=***

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

【问题讨论】:

【参考方案1】:

QSD 标志添加到您的 RewriteRule

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

根据 Apache 2.4 文档:

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

【讨论】:

以上是关于Apache 仅重定向查询的一部分的主要内容,如果未能解决你的问题,请参考以下文章

仅重定向一个 vb.net 页面?

如何仅重定向子目录而不重定向内容?

php sdk 的 Facebook 'redirect_uri' 参数未重定向到传递的 uri(仅重定向返回主页)

通过 *** 仅重定向 Web 要求

在 apache 中创建一个不重定向的重写查询字符串

apache_conf 重定向查询字符串