2017-05-05 97 views
1

我想为我维护的网站创建一个ReWriteEngine规则。该网站有两个域名变体.co.uk.com。我想要做的是.com重写为.co.uk,但也总是确保www.部分是在开始。尽管如此,我却遇到了反向和不可预测的行为。请参阅此表以了解所需的重写以及我实际获得的内容。 ReWriteCond和ReWriteRule是基于另一个关于类似问题的Stackoverflow问题。ReWriteEngine做相反的东西

| URL ENTERED | URL REWRITTEN | DESIRED REWRITE | SUCCESS | 
|-------------------|-------------------|-------------------|---------| 
| www.example.com | example.co.uk  | www.example.co.uk | No  | 
| example.com  | www.example.co.uk | www.example.co.uk | Yes  | 
| example.co.uk  | example.co.uk  | www.example.co.uk | No  | 
| www.example.co.uk | www.example.co.uk | www.example.co.uk | Yes  | 

重写规则&条件

RewriteCond %{HTTP_HOST} ^(www\.)?example\.com [NC] 
RewriteRule ^(.*) http://www.example.co.uk/$1  [R=301,L,NC] 
+0

@马丁感谢您的支持!我甚至没有注意到。它也显然是使用旧地址,因为我现在已经切换到.design顶级域名。这是一个完整的其他传奇故事,因为我的托管公司的一名技术支持成员已经打破了ReWrites的思路,试图提供帮助。 – jskrwyk

回答

1

您可能会看到一个缓存重定向,如果你正在因为你的当前指令不执行此操作重定向到example.co.uk(无www)。不过,如果你想重定向非www和www.example.com那么您将需要两个条件:

RewriteCond %{HTTP_HOST} ^www\.example\.com [NC,OR] 
RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteRule (.*) http://www.example.co.uk/$1 [R=301,L] 

所以,如果你通过www.example.com主机名不开始www.然后重定向访问。 (example.com由第2条件抓住了。)

移除了RewriteRuleNC标志,因为它是多余的这里(.*匹配的一切,无论大小写)。

清除测试之前,你的浏览器缓存。只有当您确定它工作正常时,才能将R=302更改为R=301

+0

这不是缓存问题,因为清除缓存没有改变,但您的规则修复了它 - 谢谢! – jskrwyk

+0

好吧,如果第一个例子不是缓存问题,那么“别的东西”正在导致它 - 它不是你发布的指令。 – MrWhite

+1

它可能是一些与CMS捆绑在一起的“安全”重写,虽然它们似乎都只在tld之后重写。它也可能是东道主;我在与他们一起托管的另一个站点上遇到了一些问题,他们的一个低级技术支持人员在一个单独但相关的问题之后通过添加重写规则来尝试提供帮助,但他们搞砸了。 – jskrwyk