首页 > 解决方案 > .htaccess 和重写规则的问题

问题描述

我正在将格式为www.mydomain.co或 mydomain.co 的域重定向到 mysd.herokuapp.com/public/index.html 并且效果很好。但是,我希望浏览器中的 url 显示www.mydomain.co或 mydomain.co 的初始格式,所以我添加了一个具有以下重写规则的 .htaccess 文件:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^mysd.herokuapp.com/public
RewriteRule ^(.*) https://mydomain.co/$1 [P]

现在,这是我在另一个域上使用的相同规则,它可以正常工作并显示初始 url,但由于某些原因在另一个站点上它不起作用。

这两个站点都托管在 Heroku 上。唯一的区别是域名的注册位置。

  1. 谁能向我解释为什么它可以在一个域而不是另一个域上工作?
  2. 我的重写规则错了吗?
  3. DNS 记录是否存在问题?由于域在不同的位置注册,因此重定向的设置略有不同。On 在godaddy 使用域转发,其他用户使用url 重定向记录。

感谢您的澄清和帮助。

标签: .htaccessurl-rewriting

解决方案


根据我从您的问题中了解到的情况,这是您的情况:

您有一个旧域“mydomain.co”并将您的内容移动到 heroku,因此您的实际新 URL 是“mysd.herokuapp.com”。您想继续使用旧域名和代理请求,以便通过旧域名发布来自 heroku 的内容。

您可以使用 apache 代理模块来做到这一点。但是该模块需要在服务“mydomain.co”的 http 服务器中加载和激活。

RewriteEngine On
RewriteRule ^ https://mysd.herokuapp.com%{REQUEST_URI} [P]

这假设您的内容结构在两个系统上是相同的。

如果您从同一个 http 服务器为两个域提供服务,则需要添加一个条件来防止代理循环:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?mydoain\.co$
RewriteRule ^ https://mysd.herokuapp.com%{REQUEST_URI} [P]

但是,请考虑您为这种方法支付的性能损失。对于以这种方式处理的每个请求,您都需要等待整整第二轮请求。这将使您的内容服务缓慢。确定这是你想要的吗?


推荐阅读