Laravel 5.5中/resources路由返回403禁止访问问题求助
/resources路由返回403的问题 嘿,这个问题不是Laravel本身禁止设置/resources路由,而是服务器配置或项目结构的小冲突导致的,下面是具体的排查和解决步骤:
1. 检查是否存在同名物理目录
Laravel项目根目录下的resources文件夹本来不在web可访问的public目录里,但如果你不小心在public下创建了resources文件夹,或者服务器根目录配置错了(指向了项目根而非public),服务器会优先尝试访问这个物理目录,而不是交给Laravel路由处理。
- 先去
public目录看看,要是有resources文件夹,直接删掉或者重命名它。 - 确认服务器的web根目录是指向Laravel项目的
public目录,别搞错成项目根目录了。
2. 修复Apache的.htaccess规则(用Apache的话)
Laravel自带的.htaccess文件在public目录下,可能需要确认规则是否让所有请求都走index.php:
打开public/.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] # Send Requests To Front Controller... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] </IfModule>
重点看最后三条:当请求的路径不是物理目录(!-d)也不是物理文件(!-f)时,就转发到index.php,这样Laravel路由就能接管/resources的请求了。
3. 检查Nginx配置(用Nginx的话)
如果是Nginx服务器,确保配置文件里把非静态请求都转给index.php:
location / { try_files $uri $uri/ /index.php?$query_string; }
这条规则会先检查请求的路径是不是存在的文件或目录,要是不是,就交给Laravel处理,这样/resources路由就能正常工作了。
4. 清除路由缓存
有时候路由缓存会导致新添加的路由不生效,执行这条命令清一下缓存:
php artisan route:clear
Laravel 5.5里路由缓存主要在生产环境生效,但如果你之前执行过route:cache,哪怕是开发环境也得清缓存才能看到新路由。
5. 确认路由已注册
执行这条命令看看所有已注册的路由,确认/resources在列表里:
php artisan route:list
要是列表里没有,说明你可能把路由加错文件了(默认是routes/web.php),或者有路由分组的限制(比如中间件、域名过滤),得检查一下。
内容的提问来源于stack exchange,提问作者Adam

