关于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写MySQL数据 实现代码
Jun 15 PHP
学习使用curl采集curl使用方法
Jan 11 PHP
深入了解 register_globals (附register_globals=off 网站打不开的解决方法)
Jun 27 PHP
解析php扩展php_curl.dll不加载的解决方法
Jun 26 PHP
php遍历文件夹下的所有文件和子文件夹示例
Mar 20 PHP
thinkphp视图模型查询提示ERR: 1146:Table 'db.pr_order_view' doesn't exist的解决方法
Oct 30 PHP
php判断手机浏览还是web浏览,并执行相应的动作简单实例
Jul 28 PHP
浅谈PHP中的数据传输CURL
Sep 06 PHP
PHP实现小偷程序实例
Oct 31 PHP
YII2框架中excel表格导出的方法详解
Jul 21 PHP
PHP实现笛卡尔积算法的实例讲解
Dec 22 PHP
Thinkphp 框架扩展之类库扩展操作详解
Apr 23 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
PHP详解ASCII码对照表与字符转换
2011/12/05 PHP
php去除换行符的方法小结(PHP_EOL变量的使用)
2013/02/16 PHP
yii,CI,yaf框架+smarty模板使用方法
2015/12/29 PHP
PHP邮件群发机实现代码
2016/02/16 PHP
Aster vs Newbee BO3 第三场2.18
2021/03/10 DOTA
jQuery 加上最后自己的验证
2009/11/04 Javascript
js中if语句的几种优化代码写法
2011/03/12 Javascript
JavaScript用Number方法实现string转int
2014/05/13 Javascript
javascript将DOM节点添加到文档的方法实例分析
2015/08/04 Javascript
JS运动相关知识点小结(附弹性运动示例)
2016/01/08 Javascript
JS跨域交互(jQuery+php)之jsonp使用心得
2016/07/01 Javascript
深入浅出es6模板字符串
2017/08/26 Javascript
JS实现遍历不规则多维数组的方法
2018/03/21 Javascript
小程序怎样让wx.navigateBack更好用的方法实现
2019/11/01 Javascript
JavaScript鼠标悬停事件用法解析
2020/05/15 Javascript
Vue+Element UI 树形控件整合下拉功能菜单(tree + dropdown +input)
2020/08/28 Javascript
[54:56]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第三局
2016/03/06 DOTA
Python+Opencv识别两张相似图片
2020/03/23 Python
Python数据分析之获取双色球历史信息的方法示例
2018/02/03 Python
Python入门必须知道的11个知识点
2018/03/21 Python
python爬虫之xpath的基本使用详解
2018/04/18 Python
python Kmeans算法原理深入解析
2019/08/23 Python
windows下Python安装、使用教程和Notepad++的使用教程
2019/10/06 Python
python烟花效果的代码实例
2020/02/25 Python
Django-silk性能测试工具安装及使用解析
2020/11/28 Python
python爬取代理ip的示例
2020/12/18 Python
使用Filters滤镜弥补CSS3的跨浏览器问题以及兼容低版本IE
2013/01/23 HTML / CSS
英国第二大营养品供应商:Vitabiotics
2016/10/01 全球购物
曼联官方网上商店:Manchester United Direct
2017/07/28 全球购物
书法比赛获奖感言
2014/02/10 职场文书
乡镇保密工作责任书
2014/07/28 职场文书
2015年七夕情人节感言
2015/08/03 职场文书
Python编解码问题及文本文件处理方法详解
2021/06/20 Python
如何解决springcloud feign 首次调用100%失败的问题
2021/06/23 Java/Android
SSM VUE Axios详解
2021/10/05 Vue.js
Python os和os.path模块详情
2022/04/02 Python