将非www重定向到.htaccess中的www

Pau*_*hez 181 .htaccess

我在.htaccess文件中有这个:

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

但每当我访问我的root文件时,http://example.com/robots.txt它会重定向到http://www.example.comrobots.txt/.

我该如何纠正这个问题,以便它能正确地重定向到http://www.example.com/robots.txt

Ran*_*unt 375

将配置更改为此(添加斜杠):

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

或者下面概述的解决方案(由@absiddiqueLive提出)适用于任何域:

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

如果您需要支持http和https并保留协议选项,请尝试以下操作:

RewriteRule ^login\$ https://www.%{HTTP_HOST}/login [R=301,L]
Run Code Online (Sandbox Code Playgroud)

替换logincheckout.php您需要支持HTTPS的URL或任何URL.

我认为这是个坏主意.为了推理,请阅读这个答案.

  • 第一个解决方案没有足够的重定向,第二个解决方案似乎重定向太多.例如,`blog.example.com`变为`www.blog.example.com` (2认同)

Ale*_*sov 86

这是支持https和http的正确解决方案:

# Redirect to www
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Run Code Online (Sandbox Code Playgroud)

  • 这是最好的答案 (7认同)
  • 这是完美的,它也不像其他通用解决方案那样将子域重定向到"www". (6认同)
  • 如果我没有弄错的话,这不会对多个点有效.示例:`yoursite.co.uk` (5认同)
  • 这是一个最好的解决方案,比接受的答案好得多,并且正确地处理HTTPS (4认同)
  • 完美的工作!在这么几行! (3认同)

abs*_*ive 81

RewriteEngine On

RewriteCond %{HTTP_HOST} !^www\.

RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
Run Code Online (Sandbox Code Playgroud)

对于Https

RewriteCond %{HTTPS}s ^on(s)|

RewriteRule ^(.*)$ http%1://www.%{HTTP_HOST}/$1 [R=301,L]
Run Code Online (Sandbox Code Playgroud)

  • 这个解决方案比@ ranman更受欢迎,因为它适用于所有域,因此当您为新项目实现代码或者为现有项目实现额外域时,最大限度地减少了人为错误. (7认同)

sta*_*een 22

以下示例适用于ssl非ssl,并且速度更快,因为您只使用一个规则来管理http和https

RewriteEngine on


RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTPS}s on(s)|offs()
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [NE,L,R]
Run Code Online (Sandbox Code Playgroud)

[测试]

这将重定向

HTTP

HTTPS

  • 出于好奇,你为什么不在这里使用 R=301 ?如果没有指定代码,它将默认使用 302(移动温度)。 (2认同)

小智 8

尝试这个,我在许多网站上使用它,它的工作完美

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^bewebdeveloper.com$
RewriteRule ^(.*) http://www.bewebdeveloper.com/$1  [QSA,L,R=301]
Run Code Online (Sandbox Code Playgroud)


Miz*_*mes 7

我已经测试了上述所有解决方案,但对我不起作用,我尝试删除 http:// 并且不会重定向,也删除了 www 它重定向得很好,所以我很困惑,特别是我在 https 下运行我的所有网站://

所以我将一些代码组合在一起,并为 http:// 和 https:// 以及 www 和非 www 提供了完美的解决方案。

# HTTPS forced
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
# Redirect to www
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
</IfModule>
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助别人:)