laravel - 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>
解决方案
推荐阅读
- c# - 一个连接字符串中的多个 IP 地址 C# Entity Framework
- javascript - In react check if page has refreshed then set localstorage off of graphql query otherwise keep current local storage for state
- c++ - 如何在 C++ 复制交换习语中设置 const 成员?
- javascript - THREE.JS:无法旋转相机
- variables - Jenkins 字符串变量到 Ansible 字符串变量
- swift - 使用 map 函数使用另外两个创建新对象
- html - 由于意外的内容类型而拒绝 HTML 邮件
- javascript - 如何下载输入类型=“文件”加载的修改图像
- r - 如何在 R markdown 中读取 Excel?
- php - PHP|Laravel 闭包的可变作用域