我正在尝试组合重写和代理传递以及重写问题。这就是我所拥有的
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并屏蔽该网址。
但是如果apex / f?p = 208不在网址中,我需要让example.world.net重定向到example.world.net/apex/f?p=208。
答案 0 :(得分:2)
您无法同时重定向和代理。您的重写规则标志为[R,P]
,即“重定向”和“代理”。你在这里需要一个或另一个。此外,您的规则的正则表达式永远不会与%{HTTP_HOST}
匹配,除非您的网址确实是: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/
至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]
答案 1 :(得分:0)
所以你希望 example.world.net 重定向到 http://newexample.newworld.net:7802/apex/f?p=208 或< strong> example.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/
可能会打破这一切。