如何使用htaccess将非www重定向到www URL?

时间:2009-07-21 04:06:31

标签: apache .htaccess url-rewriting

我的网站根目录中有一个网站http://www.example.com/,我添加了.htaccess文件,将http://example.com/的任何请求重定向到http://www.example.com/

最近我创建了一个新的“视频”部分,因此视频的网址为http://www.example.com/videos/。在这个视频文件夹中,我有另一个htaccess文件正在执行视频条目的重写。当我尝试访问http://example.com/videos/时,它不会将我重定向到http://www.example.com/videos/

我认为.htacces不会从父目录继承先前的规则。任何人都可以告诉我可以在/ videos /文件夹的.htaccess文件中添加的规则是什么,以便http://example.com/videos/的任何请求都会被重定向到http://www.example.com/videos/网址。

4 个答案:

答案 0 :(得分:44)

这是一个更通用的解决方案,因为它可以与任何域名一起使用,而无需在每个.htaccess中指定特定的域名:

# Redirect non-www to www:
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

相反也是可能的(www到非www):

# Redirect www to non-www
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

答案 1 :(得分:9)

我认为可能只是您现有的规则过于严格,并且因此没有在您的子目录中触发。这样的事情应该在整个网站范围内工作:

RewriteEngine on
RewriteBase /

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

答案 2 :(得分:1)

这是使用htaccess将非www重定向到www URL的最佳解决方案。在htaccess文件中使用此代码并检查url。

Options +FollowSymlinks
RewriteEngine on
rewritecond %{http_host} ^mydomain.com [nc]
rewriterule ^(.*)$ http://www.mydomain.com/$1 [r=301,nc]

答案 3 :(得分:0)

我建议大家坚持使用以下方法,它只会重定向主域,而不会重定向主机中的任何其他子目录或子域。

# Redirect non-www to www only for main domain 
# recommended if you have any/some sub-domain(s)
RewriteEngine on
RewriteBase /

# Replace yoursite and .tld respectively
RewriteCond %{HTTP_HOST} ^yoursite\.tld$
# Replace yoursite.com
RewriteRule ^(.*) http://www.yoursite.com/$1 [R=301]

如果您确定,请使用此方法,我希望您不会在您的网站上使用子域名,即subdomain.yoursite.com或其他任何内容。比你欢迎使用以下方法。 “再说一次,确保你真的想要使用这种方法”

# Redirect all non-www to www including subdomain(s)
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

以下方法会将所有www网址重定向到包含您子网域的非www网址,尽管您无法使用www.subdirecty.yoursite.com,但会提示您输入500错误。

# Redirect www to non-www
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]