使用.htaccess实现单个PHP文件的HTTPS转HTTP重定向
解决单个页面取消HTTPS强制并重定向的问题
嘿,我明白你的困扰——你想让surf.php这单个页面跳过全站的HTTPS强制,还得把它的HTTPS版本重定向到HTTP,但之前的配置反而搞崩了全站的HTTPS规则。别担心,咱们来把规则理清楚:
核心思路
我们需要做两件事:
- 全站保持强制HTTPS,但排除
surf.php; - 单独对
surf.php的HTTPS请求,重定向到对应的HTTP版本。
正确的.htaccess配置
把下面的规则放到你的.htaccess文件里,替换掉之前出错的规则:
# 1. 全站强制HTTPS(排除surf.php) RewriteCond %{SERVER_PORT} 80 RewriteCond %{REQUEST_URI} !^/surf.php RewriteRule ^(.*)$ https://%{SERVER_NAME}/$1 [R=301,L] # 2. 将surf.php的HTTPS请求重定向到HTTP RewriteCond %{SERVER_PORT} 443 RewriteCond %{REQUEST_URI} ^/surf.php RewriteRule ^(.*)$ http://%{SERVER_NAME}/$1 [R=301,L]
规则解释
- 第一条规则:当用户用HTTP(端口80)访问时,只要请求的不是
surf.php,就自动跳转到HTTPS版本。!^/surf.php表示“请求路径不是以/surf.php开头”。 - 第二条规则:当用户用HTTPS(端口443)访问
surf.php时,自动跳转到对应的HTTP版本。
注意事项
- 测试阶段可以把
R=301改成R=302(临时重定向),避免浏览器缓存永久重定向规则导致后续调试麻烦,确认没问题后再改回301。 - 确保你的服务器已经开启了
mod_rewrite模块,否则规则不会生效。 - 检查
.htaccess文件放在网站根目录,且文件权限设置正确(一般是644)。
内容的提问来源于stack exchange,提问作者Apple Bux
相关产品推荐
相关产品推荐

