WordPress中HTaccess日期链接重定向与SSL强制兼容问题
如何结合SSL强制重定向与旧链接日期格式重定向(解决网站崩溃问题)
嘿,我帮你搞定这个问题——核心问题出在混用了不同模块的重定向规则,再加上规则顺序没排对,才导致网站崩溃。咱们一步步来梳理清楚:
问题根源
你之前用的RedirectMatch属于Apache的mod_alias模块,后来加的SSL强制跳转用的是mod_rewrite模块的RewriteRule。这两个模块的规则执行顺序不一样,Apache会先处理mod_alias,再处理mod_rewrite,很容易形成重定向循环,直接把网站搞崩。而且你原来的规则没限定域名,可能会影响服务器上的其他站点。
正确的规则配置方案
咱们统一用mod_rewrite来写所有重定向规则,同时严格按优先级排序,就能完美解决问题:
1. 完整的.htaccess规则(按顺序排列)
# 首先开启mod_rewrite模块 RewriteEngine On # 规则1:强制fakedomain.com的所有HTTP请求跳转到HTTPS # 限定域名,避免影响服务器上的其他站点 RewriteCond %{HTTP_HOST} ^(www\.)?fakedomain\.com$ [NC] RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://www.fakedomain.com/$1 [R=301,L] # 规则2:旧日期格式链接重定向到无日期的HTTPS链接 # 替换原来的RedirectMatch,用mod_rewrite统一处理 RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/(?!page/)(.+)$ https://www.fakedomain.com/$4 [R=301,L] # 规则3:保留你已有的其他域名重定向规则 # 这个规则只针对anotherdomain,不会和fakedomain的规则冲突 RewriteCond %{HTTP_HOST} ^anotherdomain\.com$ [OR] RewriteCond %{HTTP_HOST} ^www\.anotherdomain\.com$ RewriteCond %{REQUEST_URI} !^/[0-9]+\..+\.cpaneldcv$ RewriteCond %{REQUEST_URI} !^/\.well-known/pki-validation/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$ RewriteRule ^/?$ "http\:\/\/www\.andanotherdomain\.com" [R=301,L]
2. 关键细节解释
- 规则顺序不能乱:先强制所有HTTP转到HTTPS,再处理旧链接的重定向,最后处理其他域名的规则——这样能避免循环,逻辑也更清晰。
- 用
%{HTTPS} off替代端口检查:比检查SERVER_PORT 80更可靠,毕竟有些服务器可能用非标准端口运行HTTP。 - 限定域名范围:每个规则都明确指定了目标域名,不会影响服务器上的其他站点(比如你的
anotherdomain.com)。
测试前的必做步骤
因为301重定向是永久性的,浏览器会缓存旧规则,测试前一定要:
- 清空浏览器缓存,或者用隐私/无痕窗口测试
- 可以用
curl -I命令在服务器上测试,比如:curl -I http://www.example.com/2018/05/30/sample-post/,看返回的Location是不是正确的HTTPS无日期链接
内容的提问来源于stack exchange,提问作者Jim
相关产品推荐
相关产品推荐

