将非www重定向到www导致循环地址

时间:2015-07-22 15:13:14

标签: .htaccess no-www

我正在配置我的网站将任何非www重定向到www,但导致地址循环如下:

abc.com/www.abc.com/index.php/www.abc.com/index.php/www.abc.com/index.php/www.abc.com/index.php/www.abc.com/index.php ... and so on

下面是我的.htaccess文件。任何人都可以帮我发现我的错误吗?

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_URI} ^system.*
RewriteRule ^(.*)$ /index.php?/$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^(/index\.php|/assets|/robots\.txt|/favicon\.ico)
RewriteRule ^(.*)\.html$ /index.php/$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^(/index\.php|/assets|/robots\.txt|/favicon\.ico)
RewriteRule ^(.*)$ /index.php/$1 [L]

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ www.%{HTTP_HOST}/index.php/$1 [R=301,L]
</IfModule>

<IfModule !mod_rewrite.c>
ErrorDocument 404 /index.php
</IfModule>

非常感谢,

1 个答案:

答案 0 :(得分:1)

RewriteRule ^(.*)$ www.%{HTTP_HOST}/index.php/$1 [R=301,L]
                   ^---

您忘记在主机名前添加http://前缀,因此Apache重写为LOCAL网址

尝试

RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/index.php/$1 [R=301,L]

代替。

这基本上适用于以下规则:

<img src="www.example.com/kittens.jpg" />
<img src="http://www.example.com/kittens.jpg" />