Laravel 在 Ubuntu 和 php7.4 我只能看到包含文件和文件夹的页面
Laravel on Ubuntu and php7.4 I can see only page with files and folders
我在 Ubuntu 上安装了 Laravel 和 PHP。
但是当我在浏览器中输入服务器的 ip 时,我只能看到文件和文件夹。
Ubuntu16.04,php7.4,apache2
这是我的文件夹/var/www/html/myproj/
:
root@srv:/var/www/html/myproj# ls
CHANGELOG.md bpl laradock routes webpack.mix.js
README.md composer.json package.json server.php
app composer.lock phpunit.xml storage
artisan config public tests
bootstrap database resources vendor
我还需要做什么?
这是 laravel.conf 文件,位于 /etc/apache2/sites-available
:
<VirtualHost *:80>
ServerName yourdomain.tld
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/myproj/public
<Directory /var/www/html/myproj>
AllowOverride All
<RequireAll>
Require ip 127.0.0.1 xxx.xx.xx.xx
</RequireAll>
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
.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>
将 nginx 虚拟主机文件配置为指向 /public 文件夹并在虚拟主机文件中添加 laravel 重写规则
假设您使用的是 Apache2,有几件事要做。
首先,尝试在浏览器中打开public路径,例如:http://localhost/public
如果问题仍然存在,请在您的服务器配置中验证是否处理了 .htaccess
文件,此 属性 必须在 apache2
配置中设置:
AllowOverride All
以下是默认 Web 服务器文件夹的示例:
<Directory /var/www/html/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
一般这个值默认设置为None
,所以改成All
。
但是,为了确保你能做到这一点,你必须激活 mod_rewrite
扩展,所以在 linux 终端中输入:
sudo a2enmod rewrite
sudo service apache2 restart
如果您使用的是 nginx,请尝试以下设置:
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name example.com www.example.com;
root /var/www/html/myproj/public;
}
我在 Ubuntu 上安装了 Laravel 和 PHP。 但是当我在浏览器中输入服务器的 ip 时,我只能看到文件和文件夹。
Ubuntu16.04,php7.4,apache2
这是我的文件夹/var/www/html/myproj/
:
root@srv:/var/www/html/myproj# ls
CHANGELOG.md bpl laradock routes webpack.mix.js
README.md composer.json package.json server.php
app composer.lock phpunit.xml storage
artisan config public tests
bootstrap database resources vendor
我还需要做什么?
这是 laravel.conf 文件,位于 /etc/apache2/sites-available
:
<VirtualHost *:80>
ServerName yourdomain.tld
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/myproj/public
<Directory /var/www/html/myproj>
AllowOverride All
<RequireAll>
Require ip 127.0.0.1 xxx.xx.xx.xx
</RequireAll>
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
.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>
将 nginx 虚拟主机文件配置为指向 /public 文件夹并在虚拟主机文件中添加 laravel 重写规则
假设您使用的是 Apache2,有几件事要做。
首先,尝试在浏览器中打开public路径,例如:http://localhost/public
如果问题仍然存在,请在您的服务器配置中验证是否处理了 .htaccess
文件,此 属性 必须在 apache2
配置中设置:
AllowOverride All
以下是默认 Web 服务器文件夹的示例:
<Directory /var/www/html/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
一般这个值默认设置为None
,所以改成All
。
但是,为了确保你能做到这一点,你必须激活 mod_rewrite
扩展,所以在 linux 终端中输入:
sudo a2enmod rewrite
sudo service apache2 restart
如果您使用的是 nginx,请尝试以下设置:
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name example.com www.example.com;
root /var/www/html/myproj/public;
}