有时我们会在另一台服务器上复制活动网站以testing新function。 很多CMS系统对数据库中的URL进行硬编码,所以不可能只使用另一个URL。 在我们的本地系统上,我们只是使用hosts文件将请求redirect到另一个IP。 这对客户来说太复杂了,所以我们需要一个更简单的方法。 可以使用apache(我们使用apache作为web服务器)作为反向代理,因此它将dev.somedomain.comredirect到anotherdomain.com。 剩下的唯一问题是,在HTML源代码中存在与anotherdomain.com的绝对链接。 有没有办法让阿帕奇(或其他软件)取代所有页面(+ js + css)中的http(s)://anotherdomain.com到http(s)://dev.somedomain.com的所有链接?
性能不是问题,因为这显然决不会运行在less数人使用的系统上。
Apache确实有一个模块 – 这就是所谓的mod_filter 。
感谢提示mod_filter。 这似乎现在工作! 我有一个问题的事实,该网站使用两个,url与www。 而没有一个。 我的configuration是:
<VirtualHost *:801> ServerName www.dev.domain1.com ServerAdmin [email protected] SetEnvIf X-Forwarded-Proto https HTTPS=on FilterProvider gzinflate INFLATE resp=Content-Encoding $gzip FilterProvider replace SUBSTITUTE Content-Type $text/ FilterProvider gzdeflate DEFLATE Content-Type $text/ FilterChain +gzinflate +replace +gzdeflate Substitute "s|domain2.com|dev.domain1.com|n" ProxyPass / http://www.domain2.com/ ProxyPassReverse / http://www.domain2.com/ # ProxyHTMLEnable On ProxyHTMLURLMap http://www.domain2.com/ / ErrorLog /var/log/apache2/dev-proxy-error.log LogLevel warn CustomLog /var/log/apache2/dev-proxy-access.log combined </VirtualHost>
而对于没有www的域名
<VirtualHost *:801> ServerName dev.domain1.com ServerAdmin [email protected] SetEnvIf X-Forwarded-Proto https HTTPS=on FilterProvider gzinflate INFLATE resp=Content-Encoding $gzip FilterProvider replace SUBSTITUTE Content-Type $text/ FilterProvider gzdeflate DEFLATE Content-Type $text/ FilterChain +gzinflate +replace +gzdeflate Substitute "s|domain2.com|dev.domain1.com|n" ProxyPass / http://domain2.com/ ProxyPassReverse / http://domain2.com/ # ProxyHTMLEnable On ProxyHTMLURLMap http://domain2.com/ / ErrorLog /var/log/apache2/dev-proxy-error.log LogLevel warn CustomLog /var/log/apache2/def-proxy-access.log combined </VirtualHost>
ProxyHTMLURLMap本身是不够的,因为它只replace完全相同的域。 在www域没有不会被replace,反之亦然。
我希望这可以帮助别人。 有了这个广泛的filter,我强烈build议不要在生产网站上使用它!
我不是真正明白你想要什么,而且我的名声太低,无法添加评论。
没错,你有这样的情况:
yourCMS.local
|
|
+ ———–>创build系统的副本= dev.yourCMS.local
在你的“复制的”Web服务器上,你有这种情况:
用户在浏览器中添加“dev.yourCMS.local”,您的开发者服务器将连接redirect到yourCMS.local,但在同一台服务器上(查找127.0.0.1)
如果我的理解正确,试试这个解决scheme:
在主机文件(ubuntu / etc / hosts)中添加条目
# <IP-Adress> <Hostname> 127.0.0.1 yourCMS.local
在/ etc / apache2 / sites-available / yoursite中更改apache站点configuration文件添加:
<Proxy *> Order deny,allow Allow from all </Proxy> ProxyPass / http://yourCMS.local ProxyPassReverse / http://yourCMS.local
重新启动Apache
尝试一下
打开其他解决scheme和意见。