关于Laravel Route重定向的一个注意点


Posted in PHP onJanuary 16, 2017

发现问题

最近在做项目发现一个奇怪的现象,我的路由配置里有如下配置:

Route::group(array('prefix'=>'admin','before'=>'adminauth'),function(){
 // 管理员登录
 Route::get('/',function(){
 return Redirect::to('admin/login');
 });
 Route::get('login','UserController@adminLogin');
}

目的是无论用户输入”admin”,还是”admin/login”都能跳转到登录界面。然而现实情况是输入”admin”之后,浏览器会无限重定向,firebug记录如下:

GET /public/admin/ 301 Moved Permanently 
GET admin  301 Moved Permanently
GET admin  301 Moved Permanently
GET /public/admin/ 301 Moved Permanently
GET admin  301 Moved Permanently
GET /public/admin/ 301 Moved Permanently
GET admin  301 Moved Permanently
....

经过一番搜索后试验,终于得出结论,问题有两点:

      1.public目录下正好有个admin目录,存放后台相关js和css

      2.laravel自带的.htaccess的这样一条规则:

RewriteEngine On
# Redirect Trailing Slashes...
RewriteRule ^(.*)/$ /public/$1 [L,R=301] #注意这条
 
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

解释一下原理:

访问public/admin目录时,apache会自动转成”public/admin/”的形式,而这种形式正好符合重写的规则,又被重写回”public/admin”的形式。因为public/admin目录确实存在,所以请求根本不会到达index.php。

所以故事就是这样,因为301那条规则的存在,无限重定向产生了。

解决方案:

      1.不要把public目录下已有的目录名做为路由地址

      2.301规则前加一条”RewriteCond %{REQUEST_FILENAME} !-d”,但是这样会使该目录被直接访问。建议生产环境中关掉apache的autoindex模块(呃,我发现我用的wamp关掉这个模块apache就启动不了了- -!)。

补充:

经过一些实验,建议将.htaccess文件改成如下:

RewriteEngine On
# Redirect Trailing Slashes...
RewriteCond %{REQUEST_FILENAME} !-d  #防止真实目录导致循环重定向
RewriteRule ^(.*)/$ /public/$1 [L,R=301]
 
# Handle Front Controller...
#RewriteCond %{REQUEST_FILENAME} !-d  #防止用户直接打开真实目录
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

总结

以上就是关于Laravel Route重定向的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

PHP 相关文章推荐
用PHP实现将GB编码转换为UTF8
Nov 25 PHP
smarty 原来也不过如此~~呵呵
Nov 25 PHP
php 远程关机操作的代码
Dec 05 PHP
PHP获取搜索引擎关键字来源的函数(支持百度和谷歌等搜索引擎)
Oct 03 PHP
php去除数组中重复数据
Nov 18 PHP
php+xml实现在线英文词典查询的方法
Jan 23 PHP
php+xml编程之SimpleXML的应用实例
Jan 24 PHP
从wamp到xampp的升级之路
Apr 08 PHP
微信公众平台开发实现2048游戏的方法
Apr 15 PHP
深入讲解PHP Session及如何保持其不过期的方法
Aug 18 PHP
PHP可变函数学习小结
Nov 29 PHP
浅析Yii2 GridView实现下拉搜索教程
Apr 22 PHP
php文件管理基本功能简单操作
Jan 16 #PHP
Python中使用django form表单验证的方法
Jan 16 #PHP
phpinfo()中Loaded Configuration File(none)的解决方法
Jan 16 #PHP
php实现文件上传及头像预览功能
Jan 15 #PHP
给大家分享几个常用的PHP函数
Jan 15 #PHP
详解Yii实现分页的两种方法
Jan 14 #PHP
PHP微信分享开发详解
Jan 14 #PHP
You might like
给网站上的广告“加速”显示的方法
2007/04/08 Javascript
IE和Mozilla的兼容性汇总event
2007/08/12 Javascript
客户端 使用XML DOM加载json数据的方法
2010/09/28 Javascript
jQuery手机浏览器中拖拽动作的艰难性分析
2015/02/04 Javascript
jQuery 限制输入字符串长度
2016/06/20 Javascript
省市选择的简单实现(基于zepto.js)
2016/06/21 Javascript
nodejs搭建本地http服务器教程
2017/03/13 NodeJs
详解升级react-router 4 踩坑指南
2017/08/14 Javascript
Mongoose实现虚拟字段查询的方法详解
2017/08/15 Javascript
bootstrap table方法之expandRow-collapseRow展开或关闭当前行数据
2020/08/09 Javascript
关于vue面试题汇总
2018/03/20 Javascript
JavaScript中AOP的实现与应用
2019/05/06 Javascript
python 多线程应用介绍
2012/12/19 Python
Python greenlet实现原理和使用示例
2014/09/24 Python
python常见数制转换实例分析
2015/05/09 Python
详解Python中表达式i += x与i = i + x是否等价
2017/02/08 Python
Python函数式编程
2017/07/20 Python
python3学习笔记之多进程分布式小例子
2018/02/13 Python
Python学习笔记之图片人脸检测识别实例教程
2019/03/06 Python
Django给admin添加Action的步骤详解
2019/05/01 Python
TensorFlow基于MNIST数据集实现车牌识别(初步演示版)
2019/08/05 Python
Python通过两个dataframe用for循环求笛卡尔积
2020/04/29 Python
Python批量修改xml的坐标值全部转为整数的实例代码
2020/11/26 Python
HTML5中的音频和视频媒体播放元素小结
2016/01/29 HTML / CSS
Ticketmaster意大利:音乐会、节日、艺术和剧院的官方门票
2019/12/23 全球购物
远东集团网络工程师面试题
2014/10/20 面试题
幼儿园托班开学寄语
2014/01/18 职场文书
《第一次抱母亲》教学反思
2014/04/16 职场文书
工程部文员岗位职责
2015/02/04 职场文书
辞职信格式模板
2015/02/27 职场文书
2015年简历自我评价范文
2015/03/11 职场文书
公积金具结保证书
2015/05/11 职场文书
2015秋季新学期开学寄语
2015/05/28 职场文书
指导老师鉴定意见
2015/06/05 职场文书
少年雷锋观后感
2015/06/10 职场文书
李强为自己工作观后感
2015/06/11 职场文书