htaccess 仅在域匹配时重定向
Posted
技术标签:
【中文标题】htaccess 仅在域匹配时重定向【英文标题】:htaccess redirect only if domain matches 【发布时间】:2012-05-01 16:12:19 【问题描述】:我有一个问题,我需要在我的域到达 php 之前重定向它。当它达到执行标头的能力时,为时已晚。
我该怎么办
if (domain == 'www.example.com')
redirect www.domain.com;
在我的 .htaccess 中?
【问题讨论】:
说真的,为什么不能像你写的那样? 以上代码示例为php。我需要它不击中 php 很公平。我只是认为 htaccess 领域特定的语言可能会更加理智。 【参考方案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>
来源:
Apache 博客:New in httpd 2.4: If, ElseIf, and Else Apache 2.4 文档:If Directive【讨论】:
这应该是公认的答案 ^^ 我会在其中添加 301:RewriteEngine On <If "req('Host') =~ /example.com/i"> RedirectMatch 301 ^(.*) https://www.example2.com$1 </If>
以上是关于htaccess 仅在域匹配时重定向的主要内容,如果未能解决你的问题,请参考以下文章
在 Laravel 5.8 中的 htaccess 中重定向 [重复]
.htaccess Joomla -> Community Builder 中的重定向登录组件