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

Posted

技术标签:

【中文标题】如何使用 htaccess 将非 www 重定向到 www URL?【英文标题】:How to redirect non-www to www URL's using htaccess? 【发布时间】:2010-11-12 12:53:28 【问题描述】:

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

最近我创建了一个新部分“视频”,所以视频的 URL 是 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/ URL。

【问题讨论】:

【参考方案1】:

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

# 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 url 重定向到非 www 包括您的子域,尽管您不能使用 www.subdirecty.yoursite.com 它会提示您 500 的错误。

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

【讨论】:

【参考方案2】:

这是使用 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】:

这是一个更通用的解决方案,因为它可以与任何域名一起使用,而无需在每个 .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]

【讨论】:

我在 Magento 中,这段代码将 //mywebsite.com/some/url 重定向到 //www.mywebsite.com/index.php。这里是否有额外的步骤来保持 URL 的持久性? 我认为您必须从 $1 附近的规则中删除一个“/”:RewriteRule ^(.*)$ %HTTP_HOST$1 [R=301,L]【参考方案4】:

我认为可能只是您现有的规则过于严格,因此没有在您的子目录中触发。像这样的东西应该适用于整个网站:

RewriteEngine on
RewriteBase /

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

【讨论】:

我应该把这条规则放在哪里,在父根目录的 .htaccess 中还是在视频文件夹的 .htaccess 中? 它应该在根目录下工作。我的根 .htaccess 中有类似的东西,它适用于子目录。

以上是关于如何使用 htaccess 将非 www 重定向到 www URL?的主要内容,如果未能解决你的问题,请参考以下文章

将非 WWW 重定向到 WWW URL

htaccess - 将所有非 www 流量重定向到 www

也将非 www 重定向到 www 子页面

将非 www URL 重定向到 www URL

非 www 到 www .htaccess 重定向不起作用? [复制]

如何使用undertow将非www URL重定向到jboss中的www URL