我正在尝试在 Apache 上配置一个子域,该子域应该:
- 如果请求以 /backoffice 开头,则提供 PHP Laravel 应用程序
- 否则,ReverseProxy 到节点应用程序。
我可以独立配置反向代理和 Laravel,但不能同时配置,因为 Laravel 公共文件夹上的 .htaccess 与反向代理配置冲突。
这是 laravel 文件夹中的 .htaccess:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
# Send Requests To Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
以下是 apache conf 文件配置的相关部分:
Alias /backoffice /mnt/volume_fra1_01/project/backoffice/public
<Directory /mnt/volume_fra1_01/project/backoffice/public >
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
ProxyRequests On
ProxyPass /backoffice !
ProxyPass / http://localhost:3000
ProxyPassReverse / http://localhost:3000
即使排除 /backoffice,每个请求都会到达反向代理。
通过删除 .htaccess,我可以确认排除确实发生了。因此,我怀疑 modrewrite 正在干扰 URI,以至于被 ProxyPass 规则捕获。
这种配置似乎很容易实现。而且在 NGINX 中很容易实现。如何在 Apache 中实现?