【问题标题】:Apache host many laravel projects in subdirectoriesApache 在子目录中托管许多 laravel 项目
【发布时间】:2015-11-22 18:21:42
【问题描述】:

我已经使用以下 URL 设置了 Apache 服务器:https://dev.mysite.com。我现在正在为我正在开发的每个项目创建子目录。例如,它可能是https://dev.mysite.com/projecthttps://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


    【解决方案1】:

    Setup your vhost如下:

    <VirtualHost *:80>
       DocumentRoot "/some/directory/mysite.dev"
       ServerName mysite.dev
    </VirtualHost>
    

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

    /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 时,应该加载该项目中的index.php 文件。

    【讨论】:

      猜你喜欢
      • 2019-09-02
      • 2018-07-11
      • 2018-06-05
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 2017-05-17
      相关资源
      最近更新 更多