重写同一虚拟主机中多个 laravel 应用程序的规则
Rewrite rules for several laravel apps in the same Virtual Host
我有一个 Apache2 虚拟主机,我将在其中托管多个 Laravel 应用程序。
VH 文档根目录是 /home/user/applications/portal
。
laravel 个应用程序位于:
/home/user/applications/portal/larapps/larapp1
/home/user/applications/portal/larapps/larapp2
...
我希望 URL 如下所示:
http://portal.com/larapp1/...
http://portal.com/larapp2/...
这是我的配置:
<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>
RewriteEngine On
RewriteBase /larapps/larapp1/public/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ index.php [L]
</Directory>
</VirtualHost>
如果请求是 http://portal.com/larapp1
那么匹配的路由如我所料:Route::get('/',...)
.
但是,出乎意料的是,如果我在请求中添加任何 URI,它不会执行我想要的操作。例如,如果请求是 http://portal.com/larapp1/foo
,则它不匹配 Route::get('/foo',...)
,而是 Route::get('/larapp1/foo',...)
.
我应该怎么做才能匹配没有前缀 /larapp1 的路由?
我找到了!糟糕的是,我在配置中犯了一个错误:我在 RewriteBase 中使用了一个文件系统路径,而我本应指示一个基本 URI。这是正确的配置:
<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>
RewriteEngine On
RewriteBase /larapp1/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ index.php [L]
</Directory>
</VirtualHost>
我有一个 Apache2 虚拟主机,我将在其中托管多个 Laravel 应用程序。
VH 文档根目录是 /home/user/applications/portal
。
laravel 个应用程序位于:
/home/user/applications/portal/larapps/larapp1
/home/user/applications/portal/larapps/larapp2
...
我希望 URL 如下所示:
http://portal.com/larapp1/...
http://portal.com/larapp2/...
这是我的配置:
<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>
RewriteEngine On
RewriteBase /larapps/larapp1/public/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ index.php [L]
</Directory>
</VirtualHost>
如果请求是 http://portal.com/larapp1
那么匹配的路由如我所料:Route::get('/',...)
.
但是,出乎意料的是,如果我在请求中添加任何 URI,它不会执行我想要的操作。例如,如果请求是 http://portal.com/larapp1/foo
,则它不匹配 Route::get('/foo',...)
,而是 Route::get('/larapp1/foo',...)
.
我应该怎么做才能匹配没有前缀 /larapp1 的路由?
我找到了!糟糕的是,我在配置中犯了一个错误:我在 RewriteBase 中使用了一个文件系统路径,而我本应指示一个基本 URI。这是正确的配置:
<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>
RewriteEngine On
RewriteBase /larapp1/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ index.php [L]
</Directory>
</VirtualHost>