You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 5.4所有路由均报NotFoundHttpException问题求助

排查Laravel 5.4全路由返回NotFoundHttpException的问题

我来帮你一步步排查这个Laravel 5.4的路由404问题,这种全路由失效的情况通常和服务器配置、路由缓存或者访问路径有关,咱们逐个来核对:

1. 优先检查服务器重写规则配置

Laravel依赖URL重写来把所有请求导向public/index.php,这是最常见的404触发原因:

  • Apache环境:

    • 确保mod_rewrite模块已经开启。你可以通过phpinfo()页面查看,或者在Apache主配置里确认LoadModule rewrite_module modules/mod_rewrite.so没有被注释。
    • 检查项目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
          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>
      
    • 如果项目放在Apache子目录(比如bradforduniversityproject),需要确认虚拟主机配置中的AllowOverride设置为All,否则.htaccess的规则不会生效。
  • Nginx环境:
    确保站点配置包含正确的try_files规则,示例配置如下:

    server {
        listen 80;
        server_name localhost;
        root /path/to/your/bradforduniversityproject/public;
    
        add_header X-Frame-Options "SAMEORIGIN";
        add_header X-Content-Type-Options "nosniff";
    
        index index.php;
    
        charset utf-8;
    
        location / {
            try_files $uri $uri/ /index.php?$query_string;
        }
    
        location = /favicon.ico { access_log off; log_not_found off; }
        location = /robots.txt  { access_log off; log_not_found off; }
    
        error_page 404 /index.php;
    
        location ~ \.php$ {
            fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; # 根据你的PHP版本调整路径
            fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
            include fastcgi_params;
        }
    
        location ~ /\.(?!well-known).* {
            deny all;
        }
    }
    

2. 确认访问路径是否正确

你当前访问的http://localhost/bradforduniversityproject/public/虽然可行,但更推荐两种更稳妥的方式:

  • 使用Laravel内置服务器:在项目根目录执行php artisan serve,然后访问http://localhost:8000,会自动指向public目录,避免路径拼接错误。
  • 配置虚拟主机:把站点根目录直接指向bradforduniversityproject/public,这样访问http://your-local-domain就能直接进入项目,无需额外拼接public后缀。

3. 路由缓存的隐藏坑

你已经执行了php artisan route:clear,但要注意一个关键细节:

  • 如果之前执行过php artisan route:cache,而你的路由里包含闭包路由(比如示例中的Route::get('auth/test',function(){ return "asd"; });),路由缓存会直接失效!因为Laravel无法序列化闭包函数。这种情况下可以手动删除bootstrap/cache/routes.php文件彻底清除缓存残留。
  • Laravel 5.4中,route:cache仅支持控制器路由,完全不兼容闭包路由,所以如果路由里有闭包,绝对不能使用这个命令。

4. 检查.env配置和目录权限

  • 确认.env文件中的APP_URL和你实际访问的地址一致,比如:
    APP_URL=http://localhost/bradforduniversityproject/public
    
  • 确保storage/和bootstrap/cache/目录有写入权限,服务器用户(比如www-data)需要能读写这两个目录,否则可能导致路由加载失败。可以执行以下命令设置权限:
    chmod -R 755 storage bootstrap/cache
    chown -R www-data:www-data storage bootstrap/cache # 根据你的服务器用户调整
    

5. 最后验证路由列表

执行php artisan route:list命令,查看所有定义的路由是否正常显示。如果命令能列出你的api/auth/test和web路由,说明路由定义本身没问题,问题肯定出在服务器配置或访问路径上;如果命令报错,那大概率是路由文件(web.php/api.php)存在语法错误(比如遗漏分号、括号不匹配等)。


内容的提问来源于stack exchange,提问作者Umair Malik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:35:14