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

时间:2013-08-16 11:44:09

标签: 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.

有谁知道我哪里出错了?

24 个答案:

答案 0 :(得分:37)

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

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

答案 1 :(得分:17)

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

PropertyGrid

答案 2 :(得分:11)

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

Options +FollowSymLinks
RewriteEngine On

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

并且它结束了:)

答案 3 :(得分:11)

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

希望它有所帮助!

答案 4 :(得分: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.

答案 5 :(得分: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>

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

sudo chmod -R 777 storage bootstrap/cache

最后,重新启动apache2:

sudo service apache2 restart

答案 6 :(得分: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>

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

答案 7 :(得分:4)

使用 Laravel默认公共/ .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>

答案 8 :(得分:3)

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

<强>的.htaccess

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

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

问候!

答案 9 :(得分:3)

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

答案 10 :(得分:2)

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

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

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

$ sudo chgrp -R www-data /var/www/html/example-project
$ sudo chmod -R 775 /var/www/html/example-project

答案 11 :(得分:1)

如果上述所有答案对您不起作用,并且您正在使用请求验证,则可能会忘记将授权设置为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 */
    /*******************************************************/
  }

  /* ... */
}

答案 12 :(得分:0)

就我而言,此错误是由于服务器中的内部链接所致,除非将适当的选项添加到.htaccess中,否则PHP无法访问这些文件夹。

RewriteEngine On之后添加以下行:

Options +FollowSymLinks

答案 13 :(得分:0)

如果您尝试了所有来自注释的.htaccess答案,但没有一个起作用,则实际上.env配置文件中的APP_URL可能不正确。 那对我有用。

答案 14 :(得分:0)

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

答案 15 :(得分:0)

在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

答案 16 :(得分: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>

答案 17 :(得分:0)

我遇到了这个错误,我只是将http://127.0.0.1:8000/粘贴到了网址栏中。 您在输入时得到以下内容:php laravel serve

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

答案 18 :(得分:0)

我对非www网站URL版本有问题-PUT方法无法正常工作。但是当使用www进入网站时。 -很好!

答案 19 :(得分:0)

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

DirectoryIndex index.php

答案 20 :(得分:0)

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

重新启动Web服务器允许正确的Whoops!要显示的错误:

  

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

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

这是在Laravel 5.5&amp;使用wampserver。

答案 21 :(得分:0)

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

答案 22 :(得分:-1)

我找到了解决方法

我将以下代码放入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>

答案 23 :(得分:-1)

您可能面临文件权限问题。验证您的htacces文件,它是否从昨天开始更改?此外,如果你正在做任何“作曲家更新”或“艺术家优化”的东西,尝试chowning你的laravel项目文件夹为您的用户名。

chown -R yourusername yourlaravelappfolder 

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

set the permissions to the Vagrantfile containing folder to 777