Laravel-在LAMP堆栈上将/ public设置为根

时间:2018-07-18 15:26:23

标签: laravel apache lamp

尽管我在将文档根目录设置为/public时遇到问题,但我正在尝试在LAMP堆栈上部署Laravel App。对于类似的问题,我已经在这里查看了几个答案,但尚未找到我的问题或解决方案。理想情况下,我想通过Apache Web服务器完成此操作,而不要修改任何Laravel文件。

我复制了默认的.conf文件,使用sudo nano /etc/apache2/sites-available/subdomain.website.com.conf

将其更改为以下文件
<VirtualHost *:80>
        ServerAdmin email@gmail.com
        ServerName subdomain.website.com
        ServerAlias www.subdomain.website.com
        DocumentRoot /var/www/subdomain.website.com/public_html/public

        <Directory /var/www/subdomain.website.com/public_html/public/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Require all granted
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        <IfModule mod_dir.c>
            DirectoryIndex index.php index.pl index.cgi index.html index.xhtml index.htm
        </IfModule>

RewriteEngine on
RewriteCond %{SERVER_NAME} =www.subdomain.website.com [OR]
RewriteCond %{SERVER_NAME} =subdomain.website.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

我按此顺序运行了以下命令。

sudo a2ensite subdomain.website.com.conf

sudo a2enmod rewrite

sudo systemctl restart apache2

sudo service apache2 restart

我清除了cookie,进行了强制刷新,但没有成功。我仍然必须去https://subdomain.website.com/public来查看网站。有什么我想念的或者我能做的事情找出可能是什么问题的吗?

/ public文件夹中的.htaccess文件包含以下内容

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

1 个答案:

答案 0 :(得分:2)

此虚拟主机用于http://(端口80)。您有一个重写规则,只要它到达此虚拟主机,便会立即重定向到https://。

RewriteEngine on
RewriteCond %{SERVER_NAME} =www.subdomain.website.com [OR]
RewriteCond %{SERVER_NAME} =subdomain.website.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]

因此,您需要将更改应用于通过https://(端口443)为该域提供服务的其他虚拟主机。