我在一台服务器上有一堆子域名:
所有这些都在同一个Apache虚拟主机中。
我需要使用由a和b子域内的新闻子域提供的提要。 饲料通常看起来像这样:
在a和b子域上,我使用jquery的ajax函数从新闻源加载数据,并将其呈现在a和b上。 由于同源政策 ,这最初不起作用。
我可以通过添加Access-Control-Allow-Origin "*"
来覆盖我的Apacheconfiguration文件。
…但这只适用于Firefox,Chrome和Safari。 Internet Explorer似乎忽略了这个指令。
因此,我需要创build一个代理。
我需要的是Apache检测到的所有子域中的新目录(例如/proxy
),并redirect到news.example.com,而不pipe子域是什么。 所以:
我可以直接在Apache +子模块(例如,mod_rewrite)中执行此操作,还是需要使用像PHP这样的脚本语言来执行此操作?
您需要ProxyPass指令 。
ProxyPass /proxy/news/a http://news.example.com/news/a
最后,我们可以使用两个模块的组合来创建代理: mod_rewrite
和mod_proxy
。
语法如下:
rewriteEngine on rewriteRule proxy/(.+)$ http://news.example.com/$1 [P]
最后的[P]告诉规则“充当代理”,没有mod_proxy就无法工作。 没有它,Apache会使“重定向”(页面顶部的URL变化)而不是“只是提供页面”。
Apache可以配置为使用apache:
考虑这个工作示例代码(代理部分):
<VirtualHost *:80> serverAdmin webmaster@localhost serverName ci.testserver.com serverAlias ci ProxyRequests Off <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPreserveHost on ProxyPass / http://localhost:8080/ </VirtualHost>