将非www重定向到www添加URL查询字符串

时间:2015-05-12 00:18:10

标签: .htaccess mod-rewrite redirect opencart

我使用.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]

我的重定向行有什么问题?任何帮助和建议将不胜感激。谢谢。

1 个答案:

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