.htaccess 你做的与你想要的相反

.htaccess 你做的与你想要的相反,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,我正在尝试为我维护的站点创建重写引擎规则。该网站有两个域名变体.co.uk和.com。我想做的是让.com重写到.co.uk,但也要确保www.部分在开头。不过,我的行为越来越反常。请参阅此表,了解所需的重写和我实际得到的内容。ReWriteCond和ReWriteRule基于另一个关于类似问题的Stackoverflow问题 | URL ENTERED | URL REWRITTEN | DESIRED REWRITE | SUCCESS | |------------

我正在尝试为我维护的站点创建
重写引擎
规则。该网站有两个域名变体
.co.uk
.com
。我想做的是让
.com
重写到
.co.uk
,但也要确保
www.
部分在开头。不过,我的行为越来越反常。请参阅此表,了解所需的重写和我实际得到的内容。ReWriteCond和ReWriteRule基于另一个关于类似问题的Stackoverflow问题

|    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]

如果您被重定向到
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
被第二种情况捕获。)

重写规则
中删除了
NC
标志,因为它在这里是多余的(
*
匹配所有内容,不管大小写)


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

这不是缓存问题,因为清除缓存没有任何更改,但您的规则已将其修复-谢谢!好吧,如果第一个例子不是缓存问题,那么是“其他东西”造成的——不是你发布的指令。可能是CMS附带的一些“安全”重写,尽管它们似乎都是在tld之后才重写的。它也可能是主人;我在与他们一起托管的另一个网站上遇到了一些问题,他们的一个低级技术支持人员试图在一个单独但相关的问题后添加重写规则,以提供帮助,但他们把事情搞砸了。@martin感谢您的关注!我甚至没有注意到。它显然也在使用旧地址,因为我现在切换到了.design TLD。不过,这是另一个传奇故事,因为我的托管公司的一位技术支持人员试图提供帮助,而我的重写工作已经被打破。