【问题标题】:htaccess redirect only if domain matcheshtaccess 仅在域匹配时重定向
【发布时间】:2012-05-01 16:12:19
【问题描述】:

我有一个问题,我需要在我的域到达 php 之前重定向它。当它达到执行标头的能力时,为时已晚。

我该怎么办

if (domain == 'www.example.com')
redirect www.domain.com;

在我的 .htaccess 中?

【问题讨论】:

  • 说真的,为什么不能像你写的那样?
  • 以上代码示例为php。我需要它不击中 php
  • 很公平。我只是认为 htaccess 领域特定的语言可能会更加理智。

标签: apache .htaccess redirect


【解决方案1】:

使用 mod_rewrite

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [R,L]

【讨论】:

  • 我认为 domain.com/$1 的斜线需要删除,因为它已经在 $1 中了
  • @webjunkie 从 apachee 2.0+ 开始,当用于匹配 htaccess 文件中的规则时,会从 URI 中删除前导斜杠,因为它会自动匹配每个目录。 URI 在服务器或虚拟主机配置中的通过规则仍将带有前导斜杠。 OP 在 htaccess 中询问规则。
  • 哦,好吧,我在服务器配置中使用了这个。但是对于未来的访问者来说可能会很高兴。
  • @webjunkie 这就是为什么有时,即使它是用于 htaccess,我也会制作正则表达式:^/?(.*)$,以匹配前导斜杠(如果有的话),以防它在其他地方使用。
  • [NC] 是做什么的?
【解决方案2】:

从 Apache 2.4 开始,您可以使用 <If> 指令来实现您的建议:

<If "req('Host') == 'www.example.com'">
  RedirectMatch (.*) http://www.example2.com$1
</If>

对于匹配或不匹配 www 的不区分大小写版本,您可以这样做:

<If "req('Host') =~ /example.com/i">
  RedirectMatch (.*) http://www.example2.com$1
</If>

来源:

【讨论】:

  • 这应该是公认的答案 ^^ 我会在其中添加 301RewriteEngine On &lt;If "req('Host') =~ /example.com/i"&gt; RedirectMatch 301 ^(.*) https://www.example2.com$1 &lt;/If&gt;
猜你喜欢
  • 2012-12-31
  • 2014-04-15
  • 2013-04-06
  • 2016-03-25
  • 1970-01-01
  • 2012-05-24
  • 1970-01-01
  • 2018-08-14
  • 2017-04-18
相关资源
最近更新 更多