在Heroku部署Laravel 8应用后除首页外API路由无法正常工作问题咨询
问题排查与解决步骤
1. 优先校验Procfile配置
- Heroku运行Laravel需要将Web根目录指定到项目的
public文件夹,正确的Procfile内容应为:
web: vendor/bin/heroku-php-apache2 public/
- 若Procfile没有末尾的
public/后缀,会导致Apache直接将项目根目录作为Web根,仅public/index.php能被重写规则命中,其余路由全部失效,修改后重新推送代码到Heroku即可生效。
2. 校验.htaccess配置是否完整
- 确认
public/.htaccess文件内容和Laravel官方默认配置一致,核心重写规则不能缺失,正确的重写块如下:
<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>
- 若.htaccess缺失最后那段将非文件/目录请求转发到index.php的规则,也会出现非首页路由404的问题。
3. 其他异常排查项
- 确认Heroku环境的
APP_KEY已经正确配置,可运行heroku config:get APP_KEY查看,若缺失执行heroku config:set APP_KEY=$(php artisan key:generate --show)配置后重启dyno即可。 - 确认路由缓存已经清除,部署时可在
composer.json的post-install-cmd中加入php artisan route:clear命令,避免缓存的路由配置导致异常。 - 可开启Heroku调试日志,运行
heroku logs --tail查看请求时的具体报错信息,快速定位问题根源。
内容的提问来源于stack exchange,提问作者mokni khalil
相关产品推荐
相关产品推荐

