【问题标题】:.htaccess to redirect 2 different domain names to seperate "landing pages".htaccess 将 2 个不同的域名重定向到单独的“登陆页面”
【发布时间】:2013-12-30 22:48:42
【问题描述】:

为了清晰起见,我重新提出了我的问题,以便其他人可以从答案中受益。

我为我工作的公司拥有 3 个域:

bizwizprint.com (托管在共享服务器上的主网站)

bizwizsigns.com (没有附加主机的二级域)

boatwiz.com (没有附加主机的三级域)

目标是让我的第二个和第三个域重定向到第一个域到各自的登录页面。

第一步:在域名注册商处,更改第二个和第三个域的 DNS“A 记录”,以解析到与主网站托管相同的 IP 地址。

第二步:在主站服务器上为第二个和第三个域创建一个“站点别名”,它们将指向主站文件所在的根目录。

第三步:创建或编辑一个 .htaccess 文件,该文件将重定向第二个和第三个域的请求并将它们指向我为它们创建的登录页面。

问题:我要为 htaccess 添加什么规则?

基本上,我希望用户在地址栏中输入“boatwiz.com”,浏览器将直接转到“bizwizprint.com/boatwiz.html”。

请注意:我不希望任何将实际 URL 更改为boatwiz 的重写规则。

这样做的原因是它是暂时的。最终会有一个真正的“boatwiz”网站和“bizwizsigns”网站,它们的结构很可能会有很大的不同。我不希望我的三个域看起来都包含相同的内容,或者让人们制作任何我需要在未来再次重定向的书签。

【问题讨论】:

  • 好的,我看到你的更新了。 1) 我不明白您所说的 “请注意:我不想要任何将实际 URL 更改为boatwiz 的重写规则。” 请更具体。 2)你写“我想让用户输入boatwiz.com,浏览器会直接转到...” - 这意味着位置栏中的URL会改变吗?但是后来你写了“我不希望它看起来我有三个内容相同的域”,这显然是矛盾的!这没有意义 - 如果您在地址栏中进行重定向,那么用户会注意到!
  • 没错,这似乎是一个矛盾,我明白你的意思。当他们实际到达那里时,我确实希望“boatwiz.com”更改为“bizwizprint.com/boatwiz.html”。我希望改变非常明显(现在)。我不想在 htaccess 中添加重写规则,这会让人们认为他们实际上不在(不是真的)在“boatwiz.com”上。着陆页(在我身上)的目标是向用户保证他们已经到达了正确的位置,尽管发生了重定向。
  • 底线是:我的域现在无处可去。你可以输入它,没有任何反应。用户不会对“应该”去哪里有先入之见。如果我要打印带有该地址的名片,我希望它去某个地方,现在它必须是不同地址上的子页面,直到我有时间和资源为其托管一个合适的站点。
  • @GraphicO:只有在 boatwiz.com 的 Apache 服务器上启用了 mod_proxy 时,您才可能执行此操作。有可能吗?

标签: .htaccess mod-rewrite


【解决方案1】:

“如何将外部域 (boatwiz.com) 重定向到新域 (bizwizprint.com/boatwiz.html) 的特定页面而不进行任何重写?”

所以你的意思可能是你想要一个“内部重定向”,而不是“外部重定向”,对吧? IE。你想要例如bizwizsigns.com 留在浏览器地址栏中显示,但显示内容 bizwizprint.com/signs,对吧?

1。仅限 htaccess - 不可能

好吧,只使用 .htaccess,这是不可能的,因为不同的域会强制进行外部重定向。引用the docs

绝对网址

如果指定了绝对 URL,mod_rewrite 会检查主机名是否与当前主机匹配。如果是,则该方案和 主机名被删除,生成的路径被视为 URL 路径。 否则,将为给定的执行外部重定向 网址。要强制将外部重定向回当前主机,请参阅 [R] 下面的标志。

2。 iframe 技巧

您可以做的是使用 iframe。将此代码放在bizwizsigns.com/index.html:

<iframe src="http://bizwizprint.com/signs" width="100%" height="100%" 
        style="border: 0 none;" frameborder="0">

但是这个解决方案有很多缺点:

  • 即使用户在 iframe 内点击,浏览器地址栏中的 URL 也不会改变
  • 浏览器书签和历史记录将无法按预期工作。

3。巧妙的主机设置(域别名到同一个目录)

您是在托管环境中,还是有自己的服务器?有时,托管允许您为由同一本地目录树处理的多个域创建别名。在这种情况下,您赢了 - 您可以编写 .htaccess 以便它将请求作为内部重定向处理:

RewriteCond %{HTTP_HOST} bizwizsigns\.com$ [NC]
RewriteRule ^$ /signs [L]

RewriteCond %{HTTP_HOST} boatwiz\.com$ [NC]
RewriteRule ^$ /boats [L]

这将(在内部)将bizwizsigns.com 重定向到/signs(= 您的bizwizprint.com/signs 内容,因为您有一个用于所有3 个域的托管服务器目录)。但是如果你例如想要将bizwizsigns.com/&lt;foo&gt; 等所有查询重定向到bizwizprint.com/signs/&lt;foo&gt;,您必须更加小心 - 请参阅REQUEST_URI 上添加的条件以防止无限循环:

RewriteCond %{HTTP_HOST} bizwizsigns\.com$ [NC]
RewriteCond %{REQUEST_URI}  !^/signs/ [NC]
RewriteRule ^.*$ /signs/$1 [L]

【讨论】:

  • 感谢您提供所有这些详细信息。我实际上已经在我的共享主机计划中设置了别名,所以默认情况下,我所有的域都指向我的文档根目录。问题是我不想进行任何重写。我不想让我有 3 个域都具有相同内容的错觉。我只是希望有人在 url 上输入boatwiz.com,然后登陆 bizwizprint.com/boat 页面,然后让主站点从那里接管。我想这与 301 重定向非常相似。这是 apache 文档所说的不可能的事情吗?
  • @GraphicO 现在我完全糊涂了。我以为您不想更改位置栏中的URL,现在看来恰恰相反……您的“登陆”一词也不是很清楚。请描述确切应该发生什么,在浏览器的地址栏以及页面内容中发生什么。最好的方法不是 cmets,而是清理和更新您的问题。会有一个解决方案,但首先必须绝对清楚你想要什么。
  • 很抱歉造成混乱。 “boatwiz.com”和“bizwizsigns.com”只是空域地址,没有我需要重定向或重写的实际页面。 “bizwizprint.com”是我现在需要的所有页面的主要网站。如果用户在浏览器中输入“boatwiz.com”,我希望最终结果字面上是“bizwizprint.com/boatwiz.html”,就好像他们点击了一个实际链接一样。当我意识到 URL 重写对于我真正需要的东西来说有点过火时,我附加了我的原始问题。我希望这更清楚。谢谢!
  • 我修改了我的问题。有机会时再看看。谢谢!
【解决方案2】:

假设您有所有 3 个域都指向同一个文档根目录,您只需要在其 htaccess 文件中使用它:

RewriteCond %{HTTP_HOST} bizwizsigns\.com$ [NC]
RewriteRule ^$ http://bizwizprint.com/signs [L,R=301]

RewriteCond %{HTTP_HOST} boatwiz\.com$ [NC]
RewriteRule ^$ http://bizwizprint.com/boats [L,R=301]

RewriteCond %{HTTP_HOST} (bizwizsigns|boatwiz)\.com$ [NC]
RewriteRule ^(.+)$ http://bizwizprint.com/$1 [L,R=301]

因此,如果它只是 http://bizwizsigns.com/http://boatwiz.com/,那么您将被重定向到 http://bizwizprint.com/signshttp://bizwizprint.com/boats。但是,如果您在最后一个 / 之后有任何内容,例如 http://bizwizsigns.com/foo/bar.html,那么您将被重定向到 http://bizwizprint.com/foo/bar.html

【讨论】:

  • +1 酷。我可以假设这将与我制定的其他一些规则一起使用吗?例如,当 WordPress 为自定义永久链接重写时?
  • @GraphicO,只要它在之前路由请求的任何规则(通常需要首先发生外部重定向)
  • 哈哈。对不起。我需要等待 DNS 更改才能看到结果,但它似乎会起作用。
  • 再次抱歉。我需要更新我的问题。我认为我需要的只是重定向而不是 url 覆盖。
  • 请注意,Wordpress 不知道如何创建相对链接。这可能会导致问题...
猜你喜欢
  • 1970-01-01
  • 2015-04-11
  • 1970-01-01
  • 2014-08-13
  • 2017-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多