Apache在子目录中托管了许多laravel项目

时间:2015-11-21 22:42:33

标签: php apache .htaccess laravel mod-rewrite

我已使用以下网址设置了Apache服务器:https://dev.mysite.com。我现在正在为开发中的每个项目创建子目录。例如,它可能是https://dev.mysite.com/projecthttps://dev.mysite.com/anotherproject。一些正在开发的项目使用Laravel和Laravel Lumen框架。

我不会为每个项目使用vhost文件,因为它们将存在于子目录中。目标是能够访问https://dev.mysite.com/project/public/并将Laravel或Lumen应用程序提供给访问该项目的用户。我可以让客户访问/ public /查看他们的项目。这种情况没有发生。

已在服务器的虚拟主机文件上设置

-Indexes,以防止在浏览器中列出文件/目录。

当我导航到{url}/project/public/heartbeat时(例如),路由未正确提供(或解析)。当我die $_SERVER['REQUEST_URI']时,我得到/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等应用程序提供给访问该项目的用户。

1 个答案:

答案 0 :(得分:0)

Setup your vhost如下:

export PATH=$PATH:/Users/jon/Library/Android/sdk/tools
export PATH=$PATH:/Users/jon/Library/Android/sdk/platform-tools

请注意,您需要在<VirtualHost *:80> DocumentRoot "/some/directory/mysite.dev" ServerName mysite.dev </VirtualHost> 设置初始“根”项目。这不一定是一个laravel应用程序,它只需要一个/some/directory/mysite.dev文件,也许你可能想要一个.htaccess文件,所以当你访问mysite.dev时,你可以在至少看到的东西。这是可选的。

index.html文件夹中,创建一个/some/directory/mysite.dev文件并添加以下内容:

.htaccess

当您访问<IfModule mod_rewrite.c> RewriteEngine On # We need this to stop the rewrite rule looping as the URI # and directory both start with 'SubProject' RewriteCond %{REQUEST_URI} !^/SubProject/ # direct all requests that start with SubProject RewriteRule ^ SubProject/?(.*)/?$ /SubProject/public/index.php [L] </IfModule> 时,应加载该项目的mysite.dev/SubProject文件。