如何在不使用绝对路径时避免Apache mod_rewrite重定向至HTTP?
解决Apache RewriteRule相对路径重定向丢失HTTPS的问题
当网站部署在AWS CloudFront这类反向代理后,后端Apache可能无法直接识别前端的HTTPS请求,导致使用相对路径的RewriteRule重定向时自动跳转到HTTP,产生额外重定向。以下是无需硬写完整URL的解决方案:
方法1:动态拼接协议与主机名
直接利用Apache内置变量构建重定向目标,避免重复书写完整域名:
RewriteRule ^/?en/mobile/(.*)$ %{HTTPS}://%{HTTP_HOST}/en/$1 [R=301,L]
%{HTTPS}会根据当前请求协议返回https或http%{HTTP_HOST}自动获取请求的主机名(如www.example.com)
方法2:让Apache识别CloudFront的HTTPS请求
若CloudFront与后端Apache之间通过HTTP通信,需先配置Apache信任CloudFront传递的X-Forwarded-Proto头,确保%{HTTPS}变量能正确识别前端协议:
# 在VirtualHost配置中添加,通过X-Forwarded-Proto判断请求协议 SetEnvIf X-Forwarded-Proto "https" HTTPS=on # 之后使用简化的重定向规则 RewriteRule ^/?en/mobile/(.*)$ %{HTTPS}://%{HTTP_HOST}/en/$1 [R=301,L]
批量优化:通用路径规则
如果有大量类似路径需要重定向,可以用更通用的规则减少重复代码,比如匹配任意双语言前缀下的/mobile/路径:
RewriteRule ^/?([a-z]{2})/mobile/(.*)$ %{HTTPS}://%{HTTP_HOST}/$1/$2 [R=301,L]
内容的提问来源于stack exchange,提问作者GUIJS
相关产品推荐
相关产品推荐

