关于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开发的一些注意点总结
Oct 12 PHP
PHP操作mysql函数详解,mysql和php交互函数
May 19 PHP
PHP生成图片验证码、点击切换实例
Jun 25 PHP
php保存二进制原始数据为图片的程序代码
Oct 14 PHP
php实现多城市切换特效
Aug 09 PHP
使用PHP和JavaScript判断请求是否来自微信内浏览器
Aug 18 PHP
Yii中Model(模型)的创建及使用方法
Dec 28 PHP
Smarty简单生成表单元素的方法示例
May 23 PHP
浅析PHP7新功能及语法变化总结
Jun 17 PHP
PHP 接入支付宝即时到账功能
Sep 18 PHP
php 替换文章中的图片路径,下载图片到本地服务器的方法
Feb 06 PHP
php中加密解密DES类的简单使用方法示例
Mar 26 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数据入库前清理 注意php intval与mysql的int取值范围不同
2010/12/12 PHP
深入PHP数据加密详解
2013/06/18 PHP
php实现的简单美国商品税计算函数
2015/07/13 PHP
php socket通信简单实现
2016/11/18 PHP
thinkPHP5.1框架使用SemanticUI实现分页功能示例
2019/08/03 PHP
JS 显示当前日期与时间的代码
2010/03/24 Javascript
JavaScript 放大镜 移动镜片效果代码
2011/05/09 Javascript
40个有创意的jQuery图片和内容滑动及弹出插件收藏集之二
2011/12/31 Javascript
JavaScript网页定位详解
2014/01/13 Javascript
JQuery Tips相关(1)----关于$.Ready()
2014/08/14 Javascript
TypeScript具有的几个不同特质
2015/04/07 Javascript
利用vue写todolist单页应用
2016/12/15 Javascript
nodeJS实现路由功能实例代码
2017/06/08 NodeJs
js实现1,2,3,5数字按照概率生成
2017/09/12 Javascript
微信小程序picker组件下拉框选择input输入框的实例
2017/09/20 Javascript
Vue异步加载about组件
2017/10/31 Javascript
基于webpack4搭建的react项目框架的方法
2018/06/30 Javascript
在Vuex使用dispatch和commit来调用mutations的区别详解
2018/09/18 Javascript
微信小程序遍历Echarts图表实现多个饼图
2019/04/25 Javascript
python使用百度翻译进行中翻英示例
2014/04/14 Python
python3通过selenium爬虫获取到dj商品的实例代码
2019/04/25 Python
Python实现数据结构线性链表(单链表)算法示例
2019/05/04 Python
Python浮点数四舍五入问题的分析与解决方法
2019/11/19 Python
python利用opencv实现SIFT特征提取与匹配
2020/03/05 Python
python一些性能分析的技巧
2020/08/30 Python
对CSS3选择器的研究(详解)
2016/09/16 HTML / CSS
微软英国官方网站:Microsoft英国
2016/10/15 全球购物
世界上获奖最多的手机镜头:Olloclip
2018/03/03 全球购物
戴尔英国翻新电脑和电子产品:Dell UK Refurbished Computers
2019/07/30 全球购物
cf战队收人广告词
2014/03/14 职场文书
党员实事承诺书
2014/03/26 职场文书
护理专业求职信
2014/06/15 职场文书
2014机关干部学习“焦裕禄精神”思想汇报
2014/09/19 职场文书
乡镇领导班子四风整顿行动工作汇报
2014/10/25 职场文书
如何写好一份优秀的工作总结?
2019/06/21 职场文书
python 统计代码耗时的几种方法分享
2021/04/02 Python