![apache 2.4 如何使用 mod_rewrite 将我的旧域名重定向到我的新域名而不更改浏览器网址](https://linux22.com/image/794096/apache%202.4%20%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20mod_rewrite%20%E5%B0%86%E6%88%91%E7%9A%84%E6%97%A7%E5%9F%9F%E5%90%8D%E9%87%8D%E5%AE%9A%E5%90%91%E5%88%B0%E6%88%91%E7%9A%84%E6%96%B0%E5%9F%9F%E5%90%8D%E8%80%8C%E4%B8%8D%E6%9B%B4%E6%94%B9%E6%B5%8F%E8%A7%88%E5%99%A8%E7%BD%91%E5%9D%80.png)
我正在将应用程序从我们公司网络中的一台服务器移动到另一台服务器。当前的生产 URL 是http://example1.mycompany.com。我们已将所有内容复制到新服务器上,并且可以使用http://example2.mycompany.com。我们的团队已经进行了测试,以确保一切正常,但我们希望有一个后备策略,以防在典型的应用程序负载下移动不起作用。更改我们的内部 DNS 记录可能需要几天时间,因此在请求将 example1.mycompany.com 指向新服务器之前,我希望我可以使用带有 mod_rewrite 或 mod_proxy 的 .htaccess 文件将流量重定向到新服务器,而用户不会知道任何变化,这样他们就可以像往常一样复制网址并通过电子邮件发送。
另一个警告是,为了对应用程序进行身份验证,我们需要通过单点登录页面,并且协议从 http 更改为 https。
我已经测试了 jpiddle888 的两个建议,但它们都没有让浏览器的地址栏看起来像是指向旧的生产服务器。
任何帮助,将不胜感激。
答案1
您正在尝试使用重定向指令,而不是重写规则指令(并且没有改写 在指示)。
如果希望客户端浏览器中的 URL 保持不变,则需要将请求代理到新服务器。这可以通过以下方式实现:mod_rewrite或者mod_proxy,这取决于您需要匹配的灵活性。
mod_rewrite:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?example1\.com$ [NC]
RewriteRule ^/(.*) "http://example2.com/$1" [P]
mod_proxy:
ProxyPass / http://example2.com/
ProxyPassReverse / http://example2.com/
答案2
您可以将 mod_proxy 与 mod_rewrite 结合使用来实现此目的
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example1\.mycompany\.com$ [NC]
RewriteRule ^(.*) RewriteEngine On
RewriteCond %{HTTP_HOST} ^example1\.mycompany\.com$ [NC]
RewriteRule ^(.*)$ https://example2.mycompany.com/$1 [P,L]