如何在Apache用户目录的子文件夹中使用Laravel应用程序


How to use Laravel app in subfolder of Apache User Directory

我正试图为我的一个用户在web根目录的子文件夹中安装一个Laravel 4应用程序。我知道通过网络访问整个框架存在重大的安全问题。我计划在了解如何实现这一点后,单独解决这些问题。

我已经尝试了我能想到的Apache别名和重写规则的每一种组合,但似乎都不起作用。这是我的目录结构:

/home/username/public_html
    .htaccess
    my_laravel_app/
        app/
        bootstrap/
        public/
            .htaccess
            index.php
            robots.txt
            ...etc (standard Laravel 4 public folder contents)
        vendor/
        ...etc (standard Laravel 4 files and folders)

第一个.htaccess文件,即直接列在用户public_html目录下的文件,包含以下内容:

AuthType Basic
AuthName Private
Authuserfile /path/to/.htpasswd
Require valid-user

第二个.htaccess是一个标准的Laravel 4 .htaccess文件。它包含以下内容:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>
    RewriteEngine On
    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]
    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

我想从本质上把这个my_laravel_app/public目录当作一个webroot,这样Laravel应用程序的功能就和直接在域上安装普通Laravel一样了。

我相信我只需要编辑第一个.htaccess文件,以包含将任何请求发送到/my_laravel_appmy_laravel_app/public的重写规则,但我似乎无法实现这一点。有人能帮忙吗?

根据您的设置,这可能会有所不同,但基本配置是:

RewriteBase /
RewriteCond %{DOCUMENT_ROOT}/my_laravel_app/public/%{REQUEST_URI} -d [OR]
RewriteCond %{DOCUMENT_ROOT}/my_laravel_app/public/%{REQUEST_URI} -f
RewriteRule . public/%{REQUEST_URI} [L]
RewriteRule . public/index.php [L]

并将其作为.htaccess放入my_laravel_app中,以限制条件的复杂性。希望你能明白。