我正在尝试为我维护的网站创建ReWriteEngine
规则。该网站有两个域变体.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]
答案 0 :(得分: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
被第二个条件捕获。)
从NC
移除了RewriteRule
标记,因为它在这里是多余的(.*
匹配所有内容,无论如何。)
在测试前清除浏览器缓存。只有当您确定它正常工作时,才能将R=302
更改为R=301
。