首页 > 解决方案 > Laravel 应用程序无法在 Apache 网络服务器上访问

问题描述

我已将 Laravel 7.26.0 应用程序上传到我的 VPS(带有 Apache 网络服务器的 Ubuntu 18.04)。

我无法从浏览器访问 index.php。

浏览器只是保持空白。没有错误信息。


执行的故障排除测试:

测试 1:访问另一个文件,然后在失败的应用程序上访问 index.php,物理上位于其 /public 文件夹中:

结果:

我可以通过 [ip-address:][virtual port]/test.txt 访问它。这应该意味着 Apache 已启动并正在运行,并且能够通过虚拟端口将用户路由到应用程序文件夹 [public]。

Test-2 - 创建一个名为 public2 的并行公用文件夹

添加只有一个短文本字符串的 index.php。

结果:

工作,访问新创建的 index.php,请注意,带有 index.php 特定 laravel 内容的原始 setuop 不再存在。这个测试的价值很低,因为它只证明 Apache 正确地将虚拟主机路由到正确的文件夹,而不是 Laravel 可以将所有来自 index.php 的传入呼叫重定向到正确的路由。

测试 3:直接在服务器上创建 Laravel 应用程序。

结果:

它可以直接在服务器上创建应用程序并访问其 index.php 页面。


我的设置:

启用重写模块:

sudo a2enmod rewrite
sudo service apache2 restart

调整 Laravel 应用的权限:

sudo chown -R trader:www-data 1_sandbox
find 1_sandbox -type f -exec chmod 644 {} \;
find 1_sandbox -type d -exec chmod 755 {} \;

sudo chgrp -R www-data 1_sandbox/storage 1_sandbox/bootstrap/cache
sudo chmod -R ug+rwx 1_sandbox/storage 1_sandbox/bootstrap/cache

为虚拟主机添加了设置:

文件:[/etc/apache2/sites-enabled/000-default.conf]

<VirtualHost *:8080>
        DocumentRoot /var/www/laravel/1_sandbox/public
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

    
<Directory /var/www/laravel/1_sandbox/public/>
        Options Indexes FollowSymLinks Multiviews
        AllowOverride All
        Order allow,deny
        Allow from all
        Require all granted
#       RewriteEngine On
</Directory>

在 Ports.conf 中添加了端口:

文件:[/etc/apache2/ports.cont]

Listen 8080

<IfModule ssl_module>
        Listen 443
</IfModule>

<IfModule mod_gnutls.c>
        Listen 443
</IfModule>

laravel 应用程序公共文件夹中的 .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]

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

标签: laravelapachedeploymentweb-deployment

解决方案


推荐阅读