如何在.htaccess的ErrorDocument规则中自动检测HTTP/HTTPS协议?
方案1:使用根相对路径(优先推荐)
如果你的错误页面和当前站点同域名,直接省略协议、域名部分,只用根相对路径即可,Apache会自动适配当前访问的协议与域名,无需额外配置:
ErrorDocument 403 /error/404
该方案最简,不需要引入额外的重写规则,也不存在协议判断的兼容问题。
方案2:自动检测协议拼接绝对URL
如果确实需要使用绝对URL的场景,可以借助mod_rewrite预定义协议变量实现自动判断:
- 首先确认Apache已开启
mod_rewrite模块 - 在.htaccess中添加如下规则,先自动识别当前协议存入环境变量:
RewriteEngine On # 识别HTTPS协议 RewriteCond %{HTTPS} =on RewriteRule ^ - [E=PROTO:https] # 识别HTTP协议 RewriteCond %{HTTPS} !=on RewriteRule ^ - [E=PROTO:http] # 若站点部署在反向代理后,可替换为判断转发协议头,规则如下: # RewriteCond %{HTTP:X-Forwarded-Proto} =https # RewriteRule ^ - [E=PROTO:https] # RewriteCond %{HTTP:X-Forwarded-Proto} !=https # RewriteRule ^ - [E=PROTO:http]
- 替换ErrorDocument规则,调用预定义的协议变量即可:
ErrorDocument 403 %{ENV:PROTO}://%{HTTP_HOST}/error/404
内容的提问来源于stack exchange,提问作者Method
相关产品推荐
相关产品推荐

