Apache同域名下Alias与ProxyPass配置异常问题排查
Apache虚拟主机配置问题解决:/be子路径无法被Laravel接管
你的问题出在ProxyPass /be !的匹配规则上——这一行是精确匹配,只排除了/be这个精确路径,而/be/user、/be/api这类以/be开头的子路径不会被排除,所以会被后面的ProxyPass / http://127.0.0.1:3000/代理到NodeJS。
修改虚拟主机配置,把精确排除换成前缀匹配排除,同时优化配置细节,就能让所有/be开头的请求都由Laravel处理:
<VirtualHost *:443> ServerName backend.mydomain.com ProxyRequests Off ProxyPreserveHost On # 排除所有以/be开头的请求,不代理到NodeJS ProxyPassMatch ^/be(/.*)? ! # 将所有/be开头的请求指向Laravel的public目录 Alias /be /var/www/html/product_importer/public <Directory "/var/www/html/product_importer/public"> Options Indexes FollowSymLinks MultiViews AllowOverride All # Apache 2.4+ 推荐使用此语法替代旧的Order规则 Require all granted </Directory> # 其余所有请求代理到NodeJS ProxyPass / http://127.0.0.1:3000/ ProxyPassReverse / http://127.0.0.1:3000/ [... error logs and ssl config] </VirtualHost>
补充说明:
ProxyPassMatch ^/be(/.*)? !:通过正则表达式匹配所有以/be开头的路径(包括/be本身和所有子路径),确保这些请求不会被转发到NodeJS。- 替换旧的
Order allow,deny为Require all granted:这是Apache 2.4版本后的标准权限配置语法,兼容性更好。 - 确认Laravel项目的
public目录下存在.htaccess文件,且AllowOverride All已开启,这样Laravel才能正常解析/be/user这类子路径的路由。
内容的提问来源于stack exchange,提问作者fabrix
相关产品推荐
相关产品推荐

