我的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.
有谁知道我哪里出错了?
答案 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