53

昨天我的 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.

有谁知道我哪里出错了?

4

24 回答 24

91

创建这个 .htaccess 文件并将其放在你的 laravel 安装(根)文件夹中。

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{REQUEST_URI} !^public
    RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
于 2015-04-20T13:12:40.947 回答
33

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

于 2018-09-03T04:16:13.907 回答
22

我遇到了同样的问题,然后我和@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>
于 2015-10-08T08:06:44.050 回答
17

检查您的虚拟主机配置。对于 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>

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

希望能帮助到你!

于 2015-07-30T10:21:14.973 回答
15

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

Options +FollowSymLinks
RewriteEngine On

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

它解决了:)

于 2013-08-17T07:34:44.877 回答
10

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

.HTACCESS

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

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

问候!

于 2018-04-03T17:57:13.220 回答
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.
于 2014-12-28T12:30:23.440 回答
7

对我来说,问题似乎与 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>

这奏效了。使用此文件,您基本上是在对服务器 (Apache) 说,每当有人试图访问公共 html 文件夹 ( http://azxcvfj.org ) 时,被重定向的人就会被重定向到http://azxcvfj.org/公共/index.php

于 2014-11-09T17:26:00.787 回答
7

通过Laravel 默认的 public/.htaccess 文件添加了一行,我解决了这个问题:

/public/.htaccess文件保持如下:

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

    RewriteEngine On
    DirectoryIndex index.php # <--- This line

    # 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>
于 2016-07-20T20:41:10.903 回答
6

在您的 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>

第二步,你必须去你的 Laravel 项目并运行以下命令。

sudo chmod -R 777 storage bootstrap/cache

最后重启你的apache2:

sudo service apache2 restart
于 2018-12-05T04:31:32.233 回答
4

First, update your Virtual Host configuration;

<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>

Then, change both permission and ownership of the asset as illustrated below.

$ sudo chgrp -R www-data /var/www/html/example-project
$ sudo chmod -R 775 /var/www/html/example-project
于 2017-08-20T16:56:57.127 回答
1

通过添加以下行解决了我的问题:

DirectoryIndex index.php
于 2018-06-03T00:18:31.957 回答
1

在我的情况下,这个错误是由于服务器中的内部链接,PHP 无法访问这些文件夹,除非将适当的选项添加到.htaccess.

在 之后添加以下行RewriteEngine On

Options +FollowSymLinks
于 2019-11-19T17:53:23.593 回答
0

如果您尝试了评论中的所有 .htaccess 答案,但没有一个有效,那么实际上您的 .env 配置文件中可能有错误的 APP_URL。这对我有用。

于 2019-10-23T21:45:26.747 回答
0

对于我的情况, Laravel 6.x遇到了这个问题,并通过安装 SSL 证书设法解决了这个问题。尝试使用 .htaccess 但从未奏效。我正在使用具有以下内容的默认 Laravel 6.x .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>
于 2020-03-09T15:05:53.650 回答
0

如果以上所有答案都不适合您,并且您正在使用请求验证,那么您可能忘记将授权设置为 true。

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class EquipmentRequest extends FormRequest {
  /**
   * Determine if the user is authorized to make this request.
   *
   * @return bool
   */
  public function authorize() {
    /*******************************************************/
    return true; /************ THIS VALUE NEEDS TO BE TRUE */
    /*******************************************************/
  }

  /* ... */
}
于 2018-06-04T14:15:31.137 回答
-1

我遇到了同样的问题,并构建了一个.htaccess文件来解决这个问题,并进行了一些改进。您可以按原样使用它,只需从Github Gist下载并将文件名“public/index.php”更改为“public/app.php”,看看它是如何工作的!:)

于 2015-07-03T20:21:07.113 回答
-1

我遇到了非 www 网站 URL 版本的问题 - PUT 方法不起作用。但是当进入带有www的网站时。- 它工作正常!

于 2018-08-25T13:33:45.030 回答
-1

在 public/.htaccess 编辑到

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

          RewriteEngine On

          # 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]

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

在项目根目录添加文件

Procfile

文件内容

web: vendor/bin/heroku-php-apache2 public/

将项目重新加载到 Heroku

bash
heroku login
cd my-project/
git init
heroku git:remote -a my project
git add .
git commit -am "make it better"
git push heroku master
heroku open
于 2019-08-06T11:37:44.863 回答
-1

我有这个错误,我只是将 http://127.0.0.1:8000/ 直接粘贴到 url 栏中。键入时会得到以下信息: php laravel serve

我正在输入 localhost/ http://127.0.0.1:8000/ 以获取您提到的错误。

于 2018-11-26T00:01:47.997 回答
-1

问题是索引文件(index.php)的位置。您必须在项目的根目录中使用命令“ ln -s public/index.php index.php ”创建指向 public/index.php 的符号链接

于 2019-09-05T12:24:55.390 回答
-1

对我来说,这只是调用route()我没有错误创建/创建的命名路由。这导致了 Forbidden 错误页面。

重新启动网络服务器允许正确的哎呀!显示错误:

路线 [my-route-name] 未定义。

修复路线名称->name('my-route-name')修复了错误。

这是在 Laravel 5.5 上并使用 wampserver。

于 2018-03-03T02:46:22.257 回答
-2

您可能会遇到文件权限问题。验证您的 htacces 文件,它是否与昨天有所不同?此外,如果您正在做任何“作曲家更新”或“工匠优化”的东西,请尝试使用您的 laravel 项目文件夹作为您的用户名。

chown -R yourusername yourlaravelappfolder 

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

set the permissions to the Vagrantfile containing folder to 777
于 2013-08-16T11:47:34.477 回答
-2

我找到了解决方案

我将以下代码放入我的代码public/.htaccess中,现在它以火箭速度运行:D

<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>
于 2020-01-13T08:30:27.730 回答