Apache2无法将non-www请求重定向至www的问题求助
将Non-WWW请求重定向到WWW的Apache正确配置
你当前的配置仅实现了强制HTTPS访问,但没有完成non-www到www的跳转——因为规则对example.com和www.example.com做了相同的重定向逻辑,最终example.com的请求还是会指向https://example.com,而非带www的域名。
正确的配置方案
下面是能同时实现「强制HTTPS」和「non-www转www」的Apache重写规则:
RewriteEngine On # 处理non-www域名的重定向(无论HTTP/HTTPS) RewriteCond %{HTTP_HOST} ^example\.com$ [NC] RewriteRule ^ https://www.example.com%{REQUEST_URI} [END,R=permanent] # 强制所有请求使用HTTPS(确保遗漏的HTTP请求也被跳转) RewriteCond %{HTTPS} off RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [END,R=permanent]
规则说明
RewriteEngine On:开启Apache的URL重写模块,这是所有重写规则的前提。RewriteCond %{HTTP_HOST} ^example\.com$ [NC]:匹配主机名为example.com的请求,[NC]标记表示不区分大小写(比如匹配Example.com这类大小写混合的域名)。RewriteRule ^ https://www.example.com%{REQUEST_URI} [END,R=permanent]:将匹配到的请求永久重定向(301状态码)到带www的HTTPS地址,%{REQUEST_URI}保留原请求的路径参数,END表示停止执行后续的重写规则,避免循环。- 第二条规则用于兜底:如果有HTTP的请求(比如
http://www.example.com),会被强制跳转至HTTPS版本。
简化版(合并逻辑)
如果不需要单独区分HTTP/HTTPS的跳转逻辑,也可以用一组规则完成所有需求:
RewriteEngine On # 匹配所有非www或非HTTPS的请求,统一跳转至HTTPS的www域名 RewriteCond %{HTTP_HOST} ^example\.com$ [NC,OR] RewriteCond %{HTTPS} off RewriteRule ^ https://www.example.com%{REQUEST_URI} [END,R=permanent]
内容的提问来源于stack exchange,提问作者Manoj Kamble
相关产品推荐
相关产品推荐

