将此添加到您的 .htaccess 文件中(假设您使用的是 Apache):
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
那将始终添加www。即使用户没有键入它。那应该可以解决您的问题。
为此并从 url 中删除 index.php,我将这段代码用于我的 EE 安装(使用 CI)
<IfModule mod_rewrite.c>
RewriteEngine On
# Removes index.php
RewriteCond $1 !\.(gif|jpe?g|png)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]
# Redirects index.php when user adds them to a URL
RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
RewriteCond %{THE_REQUEST} !/system/.*
RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,L]
# Appends www when absent
RewriteCond %{http_host} ^mysite.com [NC,OR]
RewriteRule ^(.*)$ http://www.mysite.com/$1 [R=301,L]
</IfModule>
第一个块是您基于标准 EE 的重写,以从您的所有 URLS 中删除 index.php。第二个代码块是一个很好的添加,它保留了 url,其中 index.php 是由用户添加的,从解析和为您提供重复的 url 与搜索引擎(从而损害 SEO)。相反,它会正确地转发到正确的 URL(如果存在),或者在适当的情况下返回 404。当然,最后的代码块添加(或可以删除)www。