我使用.htaccess
在我的opencart上使用SEO URL,现在我想将所有非www URL访问重定向到使用www的URL。所以我在.htaccess
文件中添加了这些行:
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
是的,如果在我的域名之前用www编写了URL,它总是被重定向到www,但是我发现我认为它不应该出现在URL中。
当我转到www.mydomain.com/category
时,我尝试通过移除www(因此它变为mydomain.com/category
)并点击ENTER
来测试该网址。该网址已重定向至www.mydomain.com/index.php?_route_=category
。我不知道是什么让网址变得那样,我认为网址应该重定向到www.mydomain.com/category
。我试图在此行之前和之后移动重定向行的位置:
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]
以下是完整的.htaccess
内容:
RewriteBase /
RewriteRule ^sitemap.xml$ index.php?route=feed/google_sitemap [L]
RewriteRule ^googlebase.xml$ index.php?route=feed/google_base [L]
RewriteRule ^download/(.*) /index.php?route=error/not_found [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]
# Redirect non-www to www (I have tried to move this lines but still resulting the same)
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
我的重定向行有什么问题?任何帮助和建议将不胜感激。谢谢。
答案 0 :(得分:1)
问题在于您已将域的重写过低。将其移至RewriteBase /
之后,它将在网址重写之前执行
RewriteBase /
# Redirect non-www to www (I have tried to move this lines but still resulting the same)
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
RewriteRule ^sitemap.xml$ index.php?route=feed/google_sitemap [L]
RewriteRule ^googlebase.xml$ index.php?route=feed/google_base [L]
RewriteRule ^download/(.*) /index.php?route=error/not_found [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]