我的.htaccess文件中有这个:

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

但每当我访问根目录下的文件,比如http://example.com/robots.txt,它就会重定向到http://www.example.comrobots.txt/。

我如何纠正这一点,使它将正确重定向到http://www.example.com/robots.txt?


当前回答

写入。htaccess:)

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

其他回答

两个警告

避免301,使用现代303或307响应状态码。

避免301

如果您真的需要指示为[R=301]的永久重定向,请仔细考虑,因为如果您决定稍后更改它,那么该页面的先前访问者将继续看到原始重定向的页面。

永久重定向信息经常存储在浏览器的缓存中,通常很难消除(重新加载页面不能解决问题)。你的网站访问者将永远停留在之前的重定向中。

也不要使用302

HTTP协议的新版本(v1.1)添加了两个新的响应状态码,可以用来代替302。

URL重定向,但要求更改请求类型为 得到的。 307 URL重定向,但要求保持最初发送的请求类型。

您仍然可以使用代码302(非永久重定向),尽管它被认为是不明确的。在任何情况下,大多数浏览器都以新的303代码指示的相同方式实现302。

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

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

乌利希期刊指南。:用于像.co这样的域名。英国,取代

RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$

with

RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+\.[^.]+$

写入。htaccess:)

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

在.htaccess文件中添加以下代码。

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

url重定向教程可以从这里找到-重定向非www到www & HTTP到HTTPS使用。htaccess文件

下面的示例在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]

(测试)

这会重定向

http

http://example.com

to

http://www.example.com

https

https://example.com

to

https://www.example.com