我遇到了一个奇怪的问题,我根据 URL 中传递的数字和特定字符串,在同一个虚拟主机定义中重写一个 URL 以代理到两个不同的 URL 目标,这在一种情况下运行正常,但在另一种情况下则不行。VHost 定义还包括一个 proxypass 定义。我就是无法将第二个 URL 呈现给用户。服务器 VHOST 配置如下:
Listen 9443
NameVirtualHost *:9443
<VirtualHost *:9443>
SSLEngine On
SSLProtocol -ALL +SSLv3 +TLSv1
SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:!LOW:!SSLv2:!EXPORT
RewriteLog "/var/log/httpd/rewrite.log"
RewriteLogLevel 9
SSLProxyEngine On
RewriteEngine On
#Condition One, match digits 100-9999
RewriteCond %{HTTP:a-http-header-message} ^(\b[1-9][0-9]{2,3}\b)$
#do not honor if sessionId is found
RewriteCond %{QUERY_STRING} !sessionId= [NC]
RewriteRule ^/standup/main/menu.xml(.*)$ https://someexternal.com/shiv/010$1 [P]
#Condition Two, Match digits 0-99
RewriteCond %{HTTP:a-http-header-message} ^(\b[0-9]{1,2}\b)
#do not honor if sessionId is found
RewriteCond %{QUERY_STRING} !sessionId=
RewriteRule ^/standup/main/menu.xml(.*)$ https://localhost.localdomain:9443/response.xml$1 [P]
ProxyPass /standup http://localhost:99999/standup
ProxyPassReverse /standup http://localhost:99999/standup
</VirtualHost>
问题是,当调用条件二时,https://localhost.localdomain:9443/response.xml呈现的内容,用户只能看到http://本地主机:99999/standup/
这根本不影响条件一。response.xml 可从服务器轻松访问,无论是内部还是外部。另外,我在另一台服务器上有完全相同的设置,并且在那里运行良好!SELinux 也被禁用了。有人能帮我看看我做错了什么吗?
谢谢!