如何使用正确的页面从非www重定向到www?

时间:2013-12-27 01:34:59

标签: .htaccess redirect http-status-code-301

我正试图通过example.comwww.example.com重定向到.htaccess

RewriteCond %{HTTP_HOST} ^example.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]

问题:my-site.com/contact.html重定向到www.example.com/index.php而不是www.example.com/contact.html

我该如何实现?

更新:这是我的Joomla网站的完整.htaccess(评论已删除):

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{QUERY_STRING} base64_encode[^(]*\([^)]*\) [OR]
RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
RewriteRule .* index.php [F]

###### this is the code in question...
RewriteCond %{HTTP_HOST} ^example$ [NC]
RewriteRule ^(.*)$ http://www.example/$1 [R=301,L]

# RewriteBase /

## Begin - Joomla! core SEF Section.
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteCond %{REQUEST_URI} !^/index\.php
RewriteCond %{REQUEST_URI} /component/|(/[^.]*|\.(php|html?|feed|pdf|vcf|raw))$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L]

# take care of sitemap.xml
RewriteCond %{REQUEST_URI} ^/sitemap.xml
RewriteRule .* /index.php?option=com_xmap&view=xml&tmpl=component&id=1&format=html [L]

我在RewriteEnigine On下方移动了两条线 - 但又遇到了同样的问题。无能。

3 个答案:

答案 0 :(得分:2)

  

问题:example.com/contact.html重定向到www.example.com/index.php而不是www.example.com/contact.html。

我猜你的htaccess文件中有其他规则,它将一切都路由到index.php。您需要确保您的重定向规则之前您拥有的任何其他规则


检查htaccess文件后,您需要在第一条规则的末尾添加L标记:

RewriteRule .* index.php [F,L]

因为没有它,即使第一个规则被应用,重定向也会被应用(例如,在队列中等待403响应时,它会被重写为index.php。)

答案 1 :(得分:1)

首先取消注释行

# RewriteBase / //Remove #

在上面一行下面写下这段代码

 RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

答案 2 :(得分:0)

我想我已经错了要求澄清,但你可以删除它。

RewriteCond%{HTTP_HOST}!^ www.example.com $ [NC]

我看到你添加了一个感叹号,我已经在没有它的地方看到了这个重定向。感叹号在这种情况下做了什么或者是不正确的?

度过美好的一天。