我有一个客户,他们的网站上有一个重写规则,该规则使用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
答案 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
是临时的。