我在我的Apache虚拟主机中设置了一个redirect服务,这个虚拟主机服务于几个子域名 – 称为a.example.com和b.example.com – 在rails应用上提供ruby服务。
在我的虚拟主机configuration文件,我有这个规则:
rewriteEngine on rewriteRule proxy/(.+)$ http://news.example.com/$1 [P]
这个想法是,我可以做http://a.example.com/proxy/news/a并获得http://news.example.com/news/a的内容,但在同一个子域,所以阿贾克斯doesn不认为我的阿贾克斯请求是跨域 – 关于这个问题的更多信息 。
问题是,虽然它在我的临时环境中工作得很好,但它不在生产中!
两台服务器都是Ubuntu服务器10.04。 Apache来自标准的ubuntu软件仓库,使用apt-get install 。
我已经做了整个/ etc / apache2 /目录的差异,唯一的区别是服务器名称。
如果我把最后一个选项改为[L],我得到一个redirect,所以这让我觉得mod_rewrite正在工作。 它只是不会与mod_proxy交谈。
通过查看日志( /var/log/apache2和rails日志),生产中的重写规则似乎被忽略 – 日志完全相同,就好像它不在那里一样。
我怎样才能debugging呢? 我可以强制Apache给我更多的信息,当我访问/proxy时为什么不执行这个特定的规则?
在浏览RewriteLog的时候,我们已经意识到Apache确实在做redirect – 问题在其他地方。
事实上,这是我们用来处理ruby的模块 – Phusion Passenger 。
我们有一个“OMG服务器停机!” 我们尝试设置PassengerHighPerformancevariables。
不幸的是,这个设置基本上意味着“忽略mod_rewrite”:)
现在我们已经调整了一下 – 它在所有的位置都开启,除非它们是以/proxy开头的:
PassengerHighPerformance On ... <location /proxy> PassengerHighPerformance Off </location>
一旦我们将这个configuration选项添加到我们的虚拟主机configuration文件,事情又开始工作了!
如果你通过谷歌来到这里,发现这个有用,请upvote Larsks对OP的评论。 他的评论使我们走上了正轨。