ReWriteEngine与想要的东西相反

时间:2017-05-05 14:11:17

标签: .htaccess mod-rewrite

我正在尝试为我维护的网站创建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]

1 个答案:

答案 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