Apache反向代理子域名至主域名/blog路径及相关问题求助
解决Bitnami LAMP环境下Laravel博客的反向代理与重定向问题
问题1:修复blog.domain.fr重定向循环(消除重复URL)
重定向循环的核心原因是:直接访问blog.domain.fr时会被重定向到domain.fr/blog,而反向代理又把domain.fr/blog的请求转发回blog.domain.fr,形成闭环。
修改子域名<VirtualHost *:443>中的重定向规则,仅对外部直接访问的请求做重定向,排除反向代理发起的请求:
RewriteEngine On # 仅当请求Host是blog.domain.fr且不是反向代理转发时,执行重定向 RewriteCond %{HTTP_HOST} ^blog\.domain\.fr$ RewriteCond %{HTTP:X-Forwarded-Host} !^domain\.fr$ RewriteRule ^ https://domain.fr/blog%{REQUEST_URI} [L,R=301]
问题2:解决domain.fr/blog/login等子路径无法访问的问题
1. 修正反向代理路径匹配规则
原ProxyPass规则因末尾斜杠缺失导致子路径映射异常,修改bitnami-ssl.conf中<VirtualHost default:443>的代理配置:
# 确保子路径正确映射,带末尾斜杠的规则优先匹配 ProxyPass /blog/ http://blog.domain.fr/ ProxyPassReverse /blog/ http://blog.domain.fr/ # 兼容不带末尾斜杠的请求 ProxyPass /blog http://blog.domain.fr/ ProxyPassReverse /blog http://blog.domain.fr/
2. 调整Laravel的路径与代理信任配置
Laravel默认基于子域名生成URL,反向代理后需要适配/blog前缀:
- 编辑项目根目录的
.env文件,修改应用URL:APP_URL=https://domain.fr/blog - 编辑
app/Http/Middleware/TrustProxies.php,让Laravel信任反向代理并获取正确的请求头:protected $proxies = '*'; protected $headers = Request::HEADER_X_FORWARDED_ALL;
3. 传递正确的请求头给Laravel
在反向代理配置中添加头信息,确保Laravel能识别实际的请求前缀:
ProxyPass /blog/ http://blog.domain.fr/ ProxyPassReverse /blog/ http://blog.domain.fr/ # 传递反向代理相关头信息 RequestHeader set X-Forwarded-Proto "https" RequestHeader set X-Forwarded-Host "domain.fr" RequestHeader set X-Forwarded-Prefix "/blog"
最终操作
修改完所有配置后,重启Bitnami Apache服务生效:
sudo /opt/bitnami/ctlscript.sh restart apache
内容的提问来源于stack exchange,提问作者jonathan_bdlf
相关产品推荐
相关产品推荐

