求可实现HTTPS/WWW强制跳转及尾斜杠去除的.htaccess规则
解决.htaccess强制HTTPS/WWW及去除尾斜杠的问题
问题根源
你当前的规则存在三个核心问题:
- 第一条规则使用
[L]标记终止后续规则执行,导致非WWW/HTTP的带尾斜杠URL跳转后,无法触发去尾斜杠逻辑 - 第二条规则错误指定了
test2.co.uk域名,导致非WWW域名跳转后的URL不会触发去尾斜杠,且域名不一致 - IONOS主机的双斜杠问题,源于规则中手动拼接
/$1,当$1为空或原路径开头含/时,会出现重复斜杠
修正后的完整规则
RewriteEngine On # 同时处理「非HTTPS/非WWW」+「带尾斜杠且非目录」的情况 RewriteCond %{HTTPS} off [OR] RewriteCond %{HTTP_HOST} !^www\.test\.co\.uk$ [NC] RewriteCond %{REQUEST_URI} ^(.+)/$ RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^ https://www.test.co.uk%1 [R=301,L] # 处理已为HTTPS+WWW但带尾斜杠的情况 RewriteCond %{REQUEST_URI} ^(.+)/$ RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^ https://www.test.co.uk%1 [R=301,L] # 兜底处理非HTTPS/非WWW但无尾斜杠的URL RewriteCond %{HTTPS} off [OR] RewriteCond %{HTTP_HOST} !^www\.test\.co\.uk$ [NC] RewriteRule ^ https://www.test.co.uk%{REQUEST_URI} [R=301,L]
规则说明
- 第一条规则:一次性完成协议/域名修正+尾斜杠去除,用
%1捕获REQUEST_URI中去掉尾斜杠的部分,避免拼接时出现双斜杠 - 第二条规则:专门针对已符合HTTPS+WWW但带尾斜杠的URL,确保路径去斜杠
- 第三条规则:兜底处理所有协议/域名不符合但无尾斜杠的URL,直接跳转至正确地址
测试验证
修正后所有测试场景均符合预期:
http://test.co.uk→https://www.test.co.uk(无尾斜杠)https://test.co.uk→https://www.test.co.uk(无尾斜杠)https://test.co.uk/page1/→https://www.test.co.uk/page1(协议/域名修正+去尾斜杠)https://www.test.co.uk/page1/→https://www.test.co.uk/page1(去尾斜杠)
IONOS主机特殊处理
IONOS的URL解析逻辑会对路径拼接做特殊处理,使用%1或%{REQUEST_URI}代替$1手动拼接,能彻底避免双斜杠问题。同时确保规则中不要在域名后手动加/,而是依赖捕获的路径直接拼接。
注意事项
- 测试阶段建议用
R=302临时跳转,确认所有规则生效后再改为R=301永久跳转,避免浏览器缓存旧规则 - 确保服务器已启用
mod_rewrite模块 - 规则中
!-d会保留实际存在的目录的尾斜杠,符合Apache默认行为,避免目录访问异常
内容的提问来源于stack exchange,提问作者Drew Wiley
相关产品推荐
相关产品推荐

