如何通过.htaccess将特定HTTPS URL重定向至HTTP?
解决方案:强制特定URL使用HTTP
当然可以实现!你只需要在现有的HTTPS强制规则之前添加一条针对特定URL的反向重定向规则就行,具体修改如下:
修改后的完整.htaccess代码
<IfModule mod_rewrite.c> <IfModule mod_negotiation.c> Options -MultiViews </IfModule> RewriteEngine On # 新增:强制特定URL使用HTTP(必须放在HTTPS全局重定向规则之前) RewriteCond %{HTTPS} on RewriteRule ^specific-path/?$ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] # Redirect Trailing Slashes If Not A Folder... RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] # Handle Front Controller... RewriteCond %{REQUEST_FILENAME}!-d RewriteCond %{REQUEST_FILENAME}!-f RewriteRule ^ index.php [L] # Handle Authorization Header RewriteCond %{HTTP:Authorization}. RewriteRule.* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] </IfModule>
关键细节说明
- 规则顺序是核心:这条例外规则一定要放在全局HTTPS强制规则的前面——Apache的Rewrite规则是从上到下执行的,先匹配到特定URL的HTTP重定向后,就会停止后续规则执行,不会再触发全局的HTTPS跳转。
- 替换实际路径:把代码里的
specific-path改成你需要强制HTTP的真实URL路径,比如要让/public/download走HTTP,就改成^public/download/?$(/?$是为了兼容带或不带尾部斜杠的请求)。 - 多URL批量处理:如果有多个URL需要强制HTTP,可以用正则匹配多个路径,比如:
RewriteRule ^(specific-path|another-path|downloads)/?$ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] - 测试小技巧:初次调试时可以把
R=301改成R=302(临时重定向),确认规则完全生效后再改回301(永久重定向),避免浏览器缓存错误的重定向规则导致后续调试麻烦。
内容的提问来源于stack exchange,提问作者Hola
相关产品推荐
相关产品推荐

