0

我正在尝试将重写和代理通行证结合起来,并且在重写时遇到问题。这是我所拥有的

RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.world.net
RewriteRule %{HTTP_HOST} http://newexample.newworld.net:7802/apex/f?p=208 [R,P]
ProxyPass / http://newexample.newworld.net:7802/

proxypass 正在工作,但我不知道如何获得初始重定向。因此,如果用户输入 example.world.net/apex/f?p=208 它会转到 newexample.newworld.net:7802/apex/f?p=208 并屏蔽 url。

但是,如果 apex/f?p=208 不在 URL 中,我需要让 example.world.net 重定向到 example.world.net/apex/f?p=208。

4

2 回答 2

2

您不能同时重定向代理。您的重写规则标志[R,P]是“重定向”和“代理”。你在这里需要一个或另一个。此外,您的规则的正则表达式永远不会匹配%{HTTP_HOST},除非您的 URL 字面意思是:http://example.world.net/%{HTTP_HOST}。您需要将其更改为:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.world.net
RewriteCond %{QUERY_STRING} !(^|&)p=208(&|$)
RewriteRule ^/?$ /apex/f?p=208 [L,QSA,R]

http://example.world.net/如果 URL 地址栏显示为 ,这将重定向浏览器http://example.world.net/apex/f?p=208。然后,由代理来获取/apex/f?p=208并将其代理到http://newexample.newworld.net:7802/.

mod_proxy 和 mod_rewrite 有可能不能很好地配合使用,因为两者最终会被应用到同一个 URL。如果您发现两者同时被应用,则将该ProxyPass行更改为:

RewriteRule ^/?(.*)% http://newexample.newworld.net:7802/$1 [L,P,QSA]
于 2012-10-16T03:29:56.597 回答
0

所以你希望example.world.net重定向到http://newexample.newworld.net:7802/apex/f?p=208example.world.net/apex/f?p=208?我假设前者,如果我错了将 RewriteRule 中的 url 更改为后者。

但我认为应该这样做

RewriteCond %{HTTP_HOST} ^example.world.net$ [NC]
RewriteRule %{HTTP_HOST} http://newexample.newworld.net:7802/apex/f?p=208 [R,L]

但随后不知道您的虚拟主机的名称/别名是什么,因此 / 在

ProxyPass / http://newexample.newworld.net:7802/

可能会打破这一切。

于 2012-10-16T02:51:45.743 回答