我对服务器没有多少经验。所以,这可能是我的 Apache 服务器 vim /etc/apache2/sites-enabled/000-default.conf 文件中的一个愚蠢的 question.Currently,我有一个如下的 proxypass。
ProxyPass /phpmyadmin !
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
我想为下面的场景实现一个条件代理传递
如果 URL 包含?_escaped_fragment_=
,则如下面的 URL
http://localhost/web/?_escaped_fragment_=/health
我希望将此 URL 重定向到具有不同端口的 URL,如下面的 URL,
http://localhost:8082/web/?_escaped_fragment_=/health
如果 URL 不包含?_escaped_fragment_=
,如下面的 URL,
http://localhost/web/#!/health
我之前提到的代理传递应该发生重定向到端口 8080。这是什么代码?
1 回答
由于 ProxyPass 无法进入 If 语句,因此您需要使用 mod_rewrite 到 proxy/redirect 并使用 RewriteCond 来过滤查询字符串。
由于查询字符串没有按照请求进行更改,因此这是一个粗略的示例:
这意味着,如果 query_string 匹配字符串“_escaped_fragment_WHATEVERHERE”,则将所有内容代理到端口 8082 的目标,并附加添加的任何查询字符串。
对于其他情况代理,它将代理到 localhost:8080。
请注意,我添加了 QSA,这是一个标记,表示在原始请求中附加任何查询字符串,但我为了清晰度抖动添加了它,因为在这种情况下_11_无论如何都会默认执行。有关它的更多信息,请在重写标记链接中添加以下内容。
您可以使此示例更加具体,例如,如果您不希望您可以使用更详细的重写或其他重写来过滤掉,则最后重写将采用任何其他查询字符串。
有关详细信息,请参阅官方文档的相关内容:重写旗帜 mod_rewrite