同一Apache虚拟主机下多Laravel应用重写规则配置问题
解决方案
你遇到该问题的核心原因是重写基础路径(RewriteBase)配置错误,误将文件系统路径作为URL访问前缀,导致Laravel解析请求路径时保留了/larapp1前缀段,按以下步骤调整即可:
1. 修改Apache虚拟主机配置
将现有VirtualHost段的配置调整为如下内容:
<VirtualHost *:80> ServerName portal.com DocumentRoot /home/user/applications/portal Alias /larapp1 /home/user/applications/portal/larapps/larapp1/public <Directory /home/user/applications/portal/larapps/larapp1/public> Options -Indexes +FollowSymLinks +MultiViews AllowOverride All Require all granted RewriteEngine On # 修正RewriteBase为URL访问前缀,而非文件系统路径 RewriteBase /larapp1/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^.*$ index.php [L] </Directory> # 后续新增larapp2等应用,复制上述Alias和Directory段修改对应标识即可 # Alias /larapp2 /home/user/applications/portal/larapps/larapp2/public # <Directory /home/user/applications/portal/larapps/larapp2/public> # Options -Indexes +FollowSymLinks +MultiViews # AllowOverride All # Require all granted # RewriteEngine On # RewriteBase /larapp2/ # RewriteCond %{REQUEST_FILENAME} !-f # RewriteCond %{REQUEST_FILENAME} !-d # RewriteRule ^.*$ index.php [L] # </Directory> </VirtualHost>
配置修改完成后执行systemctl reload apache2重载Apache配置生效。
2. 调整对应Laravel应用配置
进入对应Laravel应用的根目录,修改.env文件,补充带前缀的访问地址配置:
APP_URL=http://portal.com/larapp1 ASSET_URL=http://portal.com/larapp1
修改完成后执行php artisan config:cache清空配置缓存即可。
完成上述调整后,访问http://portal.com/larapp1/foo就可以直接匹配Route::get('/foo',...)定义的路由,不需要额外加前缀。
内容的提问来源于stack exchange,提问作者Pep
相关产品推荐
相关产品推荐

