没有www

时间:2019-03-20 03:22:36

标签: .htaccess

我有一个客户,他们的网站上有一个重写规则,该规则使用404和SSL和https:,但始终会重写为'www.mywebsite.com'。他们想要没有www的网站。每当我尝试修改规则时,代码都会因“重定向过多”而中断

这是旧的.htaccess规则

RewriteEngine On
RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

ErrorDocument 404 http://www.mywebsite.com

我尝试删除上面的“ www”,但是当我这样做时,会出现错误-无限重定向。

目标是一个简单的重写规则,该规则允许所有重定向和404错误以301进入https://mywebsite.com

2 个答案:

答案 0 :(得分:0)

我的工程师找到了解决方案,所以我将其发布在这里。

RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://mywebsite.com/$1 [R,L]
ErrorDocument 404 http://mywebsite.com

答案 1 :(得分:0)

让我向您解释以前的规则:

RewriteEngine On
RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
ErrorDocument 404 http://www.mywebsite.com

此行RewriteCond %{HTTP_HOST} .与以换行符开头的任何字符开头的任何请求匹配。

此行RewriteCond %{HTTP_HOST} !^www\. [NC]与任何不以www开头的请求匹配。

此行RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]是为了强制满足先前的条件(仅在没有www的情况下提出要求,并将其放入https + wwww中,以及您为什么要面对这个问题。

新规则:

RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://mywebsite.com/$1 [R,L]
ErrorDocument 404 http://mywebsite.com

这些通常会匹配此http发出的RewriteCond %{SERVER_PORT} 80个请求,并将其强制发送到https,而无需www

但这不会强制https://www进入https://,因此请将它们更改为:

RewriteEngine On 
RewriteCond %{HTTP_HOST} ^www\. [NC,OR]
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://mywebsite.com/$1 [R,L]
ErrorDocument 404 http://mywebsite.com

如果此代码正确,请将[R,L]更改为[R=301,L]进行永久重定向,因为单独的R标志意味着302是临时的。