【问题标题】:Laravel - Forbidden You don't have permission to access / on this serverLaravel - Forbidden 您无权访问此服务器上的 /
【发布时间】:2013-08-18 19:34:09
【问题描述】:

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

有人知道我哪里出错了吗?

【问题讨论】:

标签: laravel laravel-4


【解决方案1】:

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

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

【讨论】:

  • @Alexey 安装文件夹是什么意思?!根文件夹或公共/?
  • 我的意思是根文件夹
  • 你节省了我的时间。上帝保佑你
  • 这是不安全的!包含关键凭据的 .env 文件将被暴露。您应该始终只发布“公共”文件夹而不是其他任何内容。
【解决方案2】:

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

【讨论】:

  • 这对我有用,如果我没有看到这个答案,现在不要再坚持多久了。哇救济.. ^^
  • 这也适用于我!谢谢!但是你有链接到它说明原因的地方吗?
  • @AdedoyinAkande 欢迎您的兄弟!实际上,很高兴为您提供帮助,因为可能是 apache 的网络服务器在将 laravel 路由注册到 RouteSerivceProvider.php 之前执行文件夹权限,所以您会看到该错误
  • @Ali 好的,我知道了,非常感谢!
  • 噢!经过几个小时的困惑,这就是答案!我在 /public/ 文件夹中有一个同名文件夹
【解决方案3】:

我遇到了同样的问题,然后我和@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>

【讨论】:

    【解决方案4】:

    检查您的虚拟主机配置。 对于 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 内&lt;Directory&gt;。

    希望对你有帮助!

    【讨论】:

      【解决方案5】:

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

      Options +FollowSymLinks
      RewriteEngine On
      
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteRule ^ index.php [L]
      

      它解决了:)

      【讨论】:

      • 我们需要将这段代码放在哪个.htaccess文件中? root 之一还是在public 目录中找到的那个?
      • 更改根.htaccess文件
      【解决方案6】:

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

      .HTACCESS

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

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

      问候!

      【讨论】:

      • 我在我的 Laravel 根文件夹中添加了一个 .htaccess 文件,其中包含您发布的内容,但我仍然收到 403 Forbidden 页面...帮助!
      • 我已经重定向到另一个 .htaccess,它在另一个主机上工作,但在这里你的 htaccess 对我有用,谢谢。
      【解决方案7】:

      对于使用 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.
      

      【讨论】:

        【解决方案8】:

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

        【讨论】:

          【解决方案9】:

          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>
          

          【讨论】:

            【解决方案10】:

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

            【讨论】:

            • 我认为需要访问存储文件夹到 www-data 用户 sudo chmod -R www-data /var/www/html/example-project/storage && sudo chmod -R 755 /var/www/ html/example-project/storage
            • 是的,755 对于 chmod 应该足够了。非必要时不要使用 777(安全原因)。
            【解决方案11】:

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

            <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
            

            【讨论】:

              【解决方案12】:

              这通过添加这一行解决了我的问题:

              DirectoryIndex index.php
              

              【讨论】:

                【解决方案13】:

                在我的例子中,这个错误是由于服务器中的内部链接造成的,PHP 无法访问这些文件夹,除非将相应的选项添加到 .htaccess。

                在RewriteEngine On之后添加以下行:

                Options +FollowSymLinks
                

                【讨论】:

                • 以上都没有成功,直到得到这个答案。谢谢!
                【解决方案14】:

                如果以上所有答案都不适合您,并且您正在使用请求验证,那么您可能忘记将授权设置为 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 */
                    /*******************************************************/
                  }
                
                  /* ... */
                }
                

                【讨论】:

                • [name]Request.php
                【解决方案15】:

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

                【讨论】:

                  【解决方案16】:

                  对于我的情况,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>
                  

                  【讨论】:

                  • 你是如何为 Laravel 安装 SSL 证书的?
                  • 你能澄清一下吗?告诉我你的主机是 CPanel、VPS 还是什么?
                  【解决方案17】:

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

                  【讨论】:

                    【解决方案18】:

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

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

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

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

                    这是在 Laravel 5.5 上并使用 wampserver。

                    【讨论】:

                      【解决方案19】:

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

                      【讨论】:

                        【解决方案20】:

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

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

                        【讨论】:

                          【解决方案21】:

                          在 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
                          

                          【讨论】:

                            【解决方案22】:

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

                            【讨论】:

                              【解决方案23】:

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

                              chown -R yourusername yourlaravelappfolder 
                              

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

                              set the permissions to the Vagrantfile containing folder to 777
                              

                              【讨论】:

                              • 自昨天以来我没有改变任何东西。感谢您的建议,但没有奏效。
                              • 好的,您的服务器环境是否可能在此期间发生了变化?一定是发生了什么事 :) 你所面临的错误一定是出于某种原因,对吧?
                              • 没有任何改变。昨晚还在工作。关闭计算机。今天早上不工作。
                              • 您在哪里托管您的应用程序?在本地还是在远程服务器上?
                              • 在 vagrant 上本地使用虚拟机
                              【解决方案24】:

                              我找到了解决办法

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

                              【讨论】:

                              • 这只是该文件夹中默认的 Laravel .htaccess,它不会改变任何东西。
                              猜你喜欢
                              • 1970-01-01
                              • 1970-01-01
                              • 2018-05-17
                              • 2020-09-10
                              • 2017-11-15
                              • 2020-04-04
                              • 2017-06-22
                              • 2014-02-25
                              • 2015-07-10
                              相关资源
                              最近更新 更多