【发布时间】:2015-11-22 18:21:42
【问题描述】:
我已经使用以下 URL 设置了 Apache 服务器:https://dev.mysite.com。我现在正在为我正在开发的每个项目创建子目录。例如,它可能是https://dev.mysite.com/project 或https://dev.mysite.com/anotherproject。一些正在开发的项目使用 Laravel 和 Laravel Lumen 框架。
我不会为每个项目使用虚拟主机文件,因为它们将存在于子目录中。目标是能够访问https://dev.mysite.com/project/public/ 并将 Laravel 或 Lumen 应用程序提供给访问该项目的用户。我可以让客户访问 /public/ 查看他们的项目。这不会发生。
-Indexes 已在服务器的虚拟主机文件中设置,以防止在浏览器中列出文件/目录。
当我导航到{url}/project/public/heartbeat(例如)时,路由没有被正确地提供(或解析)。当我对$_SERVER['REQUEST_URI'] 执行die 时,我得到/project/public/heartbeat。路由heartbeat设置如下:$app->get('/heartbeat', 'Controller@method');。访问这个 url 给出了 Illuminate 代码中典型的 HTTP not found 异常。然而;当我将project/public/ 添加到路由路径的开头(导致$app->get('/project/public/heartbeat'...)时,它可以工作。我尝试将RewriteBase / 和RewriteBase /project/public/ 和RewriteBase /project/ 设置添加到.htaccess 文件中,但都不起作用。我确实知道正在使用 .htaccess(我可以将“asdf”添加到文件中并破坏它)。 mod_rewrite 模块已启用。
这里是 vhost 的配置文件,以及 project/public/.htaccess 文件。
.htaccess:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
虚拟主机:
<VirtualHost *:80>
ServerName dev.mysite.com
Redirect permanent / https://dev.mysite.com
</VirtualHost>
<VirtualHost *:443>
ServerName dev.mysite.com
DocumentRoot /var/www/public
<Directory /var/www/public>
Options -Indexes +FollowSymLinks +MultiViews
AllowOverride All
Require all granted
</Directory>
LogLevel warn
ErrorLog ${APACHE_LOG_DIR}/dev-error.log
CustomLog ${APACHE_LOG_DIR}/dev-access.log combined
ErrorDocument 403 https://dev.mysite.com
</VirtualHost>
如果您需要任何进一步的信息,请告诉我。同样,最终目标是能够访问 https://dev.mysite.com/project/public/ 并将 Laravel、Lumen 等应用程序提供给访问项目的用户。
【问题讨论】:
标签: php apache .htaccess laravel mod-rewrite