Laravel - Forbidden您无权访问此服务器上的/

pan*_*hro 34 laravel laravel-4

我的laravel安装昨天工作正常,但今天我收到以下错误:

Forbidden

You don't have permission to access / on this server.

Additionally, a 403 Forbidden error was encountered while trying to use an ErrorDocument to handle the request.
Run Code Online (Sandbox Code Playgroud)

有谁知道我哪里出错了?

Ale*_*xey 47

在laravel安装文件夹中创建并放置此.htaccess文件.

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{REQUEST_URI} !^public
    RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
Run Code Online (Sandbox Code Playgroud)

  • 这是不安全的!包含关键凭据的 .env 文件将被暴露。您应该始终只发布“public”文件夹,而不发布其他任何内容。 (6认同)
  • 那是解决方案之王谢谢Alex (2认同)
  • @Alexey 安装文件夹是什么意思?!根文件夹还是 public/ ? (2认同)
  • 你节省了我的时间。上帝祝福你 (2认同)

Ali*_*Ali 27

对我来说,这只是因为我的public_html 中有一个与该路由名称相同的文件夹!
所以请检查您是否没有包含该路线地址的文件夹!
希望有帮助

  • 这对我有用,如果我没有看到这个答案,我会坚持多久。哇松了口气..^^ (2认同)
  • @AdedoyinAkande 欢迎你,兄弟!实际上,很高兴为您提供帮助,因为网络服务器(可能是 apache)在 Laravel 路由在 RouteSerivceProvider.php 中注册之前执行文件夹权限,因此您会看到该错误 (2认同)
  • 哦,ffs!经过几个小时的困惑,这就是答案!我在 /public/ 文件夹中有一个同名的文件夹 (2认同)

小智 19

我遇到了同样的问题,然后我和@lubat的解决方案一样,我的项目工作得很好.:D我的虚拟主机配置:

<VirtualHost *:80>
     ServerName laravelht.vn
     DocumentRoot D:/Lavarel/HTPortal/public
     SetEnv APPLICATION_ENV "development"
     <Directory D:/Lavarel/HTPortal/public>
         DirectoryIndex index.php
         AllowOverride All
         Require all granted
         Order allow,deny
         Allow from all
     </Directory>
 </VirtualHost>
Run Code Online (Sandbox Code Playgroud)


lub*_*art 13

检查虚拟主机配置.对于Ubuntu,你可以在/etc/apache2/sites-available/yourlaravel.conf找到它应该是这样的:

<VirtualHost *:80>
ServerName yourlaravel.com
DocumentRoot "/path/to/your/laravel/project/public"
ServerAlias *.yourlaravel.com

<Directory "/path/to/your/laravel/project/public">
    AllowOverride All
    Require all granted
</Directory>
Run Code Online (Sandbox Code Playgroud)

关键线在Require all granted里面<Directory>.

希望能帮助到你!


Moh*_*nju 12

您是否尝试更改laravel建议的.htaccess文件,如果默认值不起作用?我遇到了类似的问题并将其更改为

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
Run Code Online (Sandbox Code Playgroud)

并且它结果:)


Rad*_*dez 10

只需.htaccess使用以下代码在根项目路径中添加一个文件即可重定向到公共文件夹:

.HTACCESS

## Redirect to public folder
<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule ^$ public/ [L]
    RewriteRule (.*) public/$1 [L]
</IfModule>
Run Code Online (Sandbox Code Playgroud)

非常简单,但在我的服务器中为我工作。

问候!


sta*_*bit 9

对于那些使用Mamp或Mamp pro的人:

Open MAMP Pro
Click on “Hosts”
Click on “Extended” (UPDATE: Only if you are using MAMP Pro 3.0.6)
Check “Indexes”
Click “Save”
That’s it! Reload your localhost starting page and it should work properly.
Run Code Online (Sandbox Code Playgroud)


Evh*_*vhz 6

Laravel默认的public / .htaccess文件为我解决了这一问题,增加了额外的一行:

/public/.htaccess文件仍然如下:

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

    RewriteEngine On
    DirectoryIndex index.php # This line does the trick

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

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

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>
Run Code Online (Sandbox Code Playgroud)


Yve*_*ves 6

首先,更新您的虚拟主机配置;

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/html/example-project/public
    <Directory /var/www/html/example-project/public/>
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

然后,更改资产的权限和所有权,如下所示。

$ sudo chgrp -R www-data /var/www/html/example-project
$ sudo chmod -R 775 /var/www/html/example-project
Run Code Online (Sandbox Code Playgroud)


Pie*_*rVK 5

对于我来说,问题似乎出在public_html文件夹中没有index.php文件这一事实。但是,当我输入以下地址时:http : //azxcvfj.org/public,它起作用了(此地址只是一个示例。它指向无处)。这使我开始思考,最终我通过执行以下操作解决了该问题。

我在应用程序的根文件夹(public_html文件夹)中制作了一个.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 ^ public/index.php [L]
</IfModule>
Run Code Online (Sandbox Code Playgroud)

这行得通。使用此文件,您基本上是对服务器(Apache)说,只要有人尝试访问公共html文件夹(http://azxcvfj.org),就会将要重定向的某人重定向到http://azxcvfj.org/ public / index.php


小智 5

在您的VirtualHost中,编写DocumentRoot以指向主目录中的Laravel应用程序。另外,您必须添加下面显示的目录以及自己的路径:

<Directory /home/john/Laravel_Projects/links/public/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    allow from all
    Require all granted
</Directory>
Run Code Online (Sandbox Code Playgroud)

第二步,您必须转到Laravel项目并运行以下命令。

sudo chmod -R 777 storage bootstrap/cache
Run Code Online (Sandbox Code Playgroud)

最后,重新启动apache2:

sudo service apache2 restart
Run Code Online (Sandbox Code Playgroud)


Gad*_*oma -2

您可能面临文件权限问题。验证您的 htacces 文件,与昨天相比有变化吗?另外,如果您正在进行任何“作曲家更新”或“工匠优化”的工作,请尝试根据您的用户名 chowning 您的 laravel 项目文件夹。

chown -R yourusername yourlaravelappfolder 
Run Code Online (Sandbox Code Playgroud)

编辑:问题可能是由于您有关 Vagrant 的本地文件权限所致。尝试

set the permissions to the Vagrantfile containing folder to 777
Run Code Online (Sandbox Code Playgroud)