我们有一个Web应用程序可以处理不同的URL格式,并以不同的格式返回相同的内容。
/dosomething
/foo/dosomething (returns mobile content)
/bar/dosomething (returns html for a browser)
请参阅下面的示例虚拟主机。
对于Apache 2.2,我使用重写规则将http://www.foobarbaz.net/dosomething重定向到位置" / baz /"它按照我的预期运作。
" PT" RewriteRule上的标志将URI传递回Apache,并允许我们提供来自" baz"位置。
<VirtualHost *:80>
ServerName www.foobarbaz.net
RewriteEngine On
#Block requests for favicon
RewriteRule ^/favicon.ico$ - [F]
# If the requested URI is NOT located in bar or foo
# Prepend an /baz to everything that does not already starts with it
# and force the result to be handled by the next URI-handler ([PT])
RewriteCond %{REQUEST_URI} !^/bar/.*$
RewriteCond %{REQUEST_URI} !^/foo/.*$
RewriteRule ^/(.*) /baz/$1 [PT,QSA]
<Location "/baz/">
RequestHeader append ABC-Request-Origin "/baz"
ProxyPass ajp://localhost:8009/webapp/
ProxyPassReverse /
ProxyPassReverseCookiePath /webapp /
</Location>
<Location "/bar/">
RequestHeader append ABC-Request-Origin "/bar"
ProxyPass ajp://localhost:8009/webapp/
ProxyPassReverse /
ProxyPassReverseCookiePath /webapp /bar/
</Location>
<Location "/foo/">
RequestHeader append ABC-Request-Origin "/foo"
ProxyPass ajp://localhost:8009/webapp/
ProxyPassReverse /
ProxyPassReverseCookiePath /webapp /foo/
</Location>
</VirtualHost>
对于Apache 2.4.12,重写规则的功能不同,Apache会尝试在文件系统上查找内容。 Apache寻找一个&#34; baz&#34;目录不存在。
我尝试添加其他位置&#34; /&#34;并删除重写规则(见下文)。
文档表明,对于重叠的位置,最不具体的位置应该先行。
http://httpd.apache.org/docs/current/sections.html
适用于&#34; /&#34;,但不适用于&#34; / foo /&#34;或&#34; / bar&#34;。似乎&#34; /&#34;总是被使用和&#34; foo&#34;和&#34; bar&#34;始终包含在对p.roxy
的请求中<VirtualHost *:80>
ServerName www.foobarbaz.net
<Location "/">
RequestHeader append ABC-Request-Origin "/baz"
ProxyPass ajp://localhost:8009/webapp/
ProxyPassReverse /
ProxyPassReverseCookiePath /webapp /
</Location>
<Location "/bar/">
RequestHeader append ABC-Request-Origin "/bar"
ProxyPass ajp://localhost:8009/webapp/
ProxyPassReverse /
ProxyPassReverseCookiePath /webapp /bar/
</Location>
<Location "/foo/">
RequestHeader append ABC-Request-Origin "/foo"
ProxyPass ajp://localhost:8009/webapp/
ProxyPassReverse /
ProxyPassReverseCookiePath /webapp /foo/
</Location>
</VirtualHost>
是否有人就如何改进此设置提出建议?或者处理对&#34; /&#34;的请求的建议;不同的是&#34; / foo&#34;或&#34; / bar&#34;
感谢您的帮助。
吉姆
答案 0 :(得分:0)
首先使用位置“/”可以正确使用“/”,“/ foo”和“/ bar”的位置我还有其他与在应用程序中构建链接相关的问题,但我不相信这是一个Apache问题。