Laravel 5.6部署于子目录出现页面重定向异常求助
解决Laravel 5.6子目录部署的“页面未正确重定向”问题
我之前在子目录部署Laravel时也碰到过一模一样的重定向循环问题,给你几个实用的排查和修复步骤,应该能解决你的问题:
1. 先修正Laravel的核心配置
首先要确保Laravel知道自己部署在子目录下,这一步很关键:
- 打开项目根目录的
.env文件,把APP_URL改成你的实际访问地址,比如:APP_URL=http://your-domain.com/charity-frontmode - 再检查
config/app.php里的'url'配置项,确保它是从.env读取的(默认是env('APP_URL', 'http://localhost')),不需要手动硬编码。
2. 重构根目录的.htaccess
你当前的根目录.htaccess是直接指向根目录的index.php,但Laravel的入口文件在public子目录里,所以需要把所有请求转发到public目录。替换根目录的.htaccess内容为:
<IfModule mod_rewrite.c> RewriteEngine On # 将所有根目录请求转发到public子目录 RewriteRule ^(.*)$ public/$1 [L] </IfModule>
3. 调整public目录的.htaccess
你当前的public/.htaccess里的RewriteBase可能导致重定向循环,建议改成Laravel默认的标准配置(并移除多余的RewriteBase):
<IfModule mod_rewrite.c> Options -MultiViews -Indexes RewriteEngine On # 处理Authorization Header,避免API权限问题 RewriteCond %{HTTP:Authorization} . RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] # 移除URL末尾的斜杠(非目录的情况) RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)/$ /$1 [L,R=301] # 前端控制器规则,所有非文件/目录的请求都交给index.php处理 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] </IfModule>
4. 确认Apache服务器配置
如果上面的步骤还没解决,要检查Apache是否允许.htaccess生效:
- 找到你的虚拟主机配置文件(比如
/etc/apache2/sites-available/your-site.conf),在对应的Directory块里设置:<Directory "/var/www/html/your-root-folder"> AllowOverride All Require all granted </Directory> - 重启Apache服务使配置生效:
sudo systemctl restart apache2
5. 清除Laravel缓存
最后别忘了清除Laravel的缓存,避免旧配置影响:
php artisan cache:clear php artisan config:clear php artisan route:clear
如果是生产环境,修复完成后可以运行php artisan config:cache重新生成配置缓存。
如果还是有问题,建议打开浏览器的开发者工具(Network标签),查看具体的重定向链路,看看请求是在哪个环节陷入了循环,这样能更精准定位问题~
内容的提问来源于stack exchange,提问作者Amit Sharma
相关产品推荐
相关产品推荐

