关于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 相关文章推荐
pw的一个放后门的方法分析
Oct 08 PHP
PHP SEO优化之URL优化方法
Apr 21 PHP
PHP求最大子序列和的算法实现
Jun 24 PHP
php empty()与isset()区别的详细介绍
Jun 17 PHP
PHP开发Apache服务器配置
Jul 15 PHP
微信公众号开发客服接口实例代码
Oct 21 PHP
Yii2使用$this->context获取当前的Module、Controller(控制器)、Action等
Mar 29 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
Nov 14 PHP
php微信开发之图片回复功能
Jun 14 PHP
PHP生成短网址的思路以及实现方法的详解
Mar 25 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
Jan 22 PHP
laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
Feb 18 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传输数据的代码
2007/11/13 PHP
基于flush()不能按顺序输出时的解决办法
2013/06/29 PHP
ueditor 1.2.6 使用方法说明
2013/07/24 PHP
PHP+shell实现多线程的方法
2015/07/01 PHP
thinkPHP数据库增删改查操作方法实例详解
2016/12/06 PHP
Vagrant(WSL)+PHPStorm+Xdebu 断点调试环境搭建
2019/12/13 PHP
页面调用单个swf文件,嵌套出多个方法。
2011/11/21 Javascript
基于jQuery实现的幻灯图片切换
2016/12/02 Javascript
JS实现HTML标签转义及反转义
2020/04/14 Javascript
详解Vue使用命令行搭建单页面应用
2017/05/24 Javascript
javaScript和jQuery自动加载简单代码实现方法
2017/11/24 jQuery
微信小程序基于slider组件动态修改标签透明度的方法示例
2017/12/04 Javascript
js实现动态添加上传文件页面
2018/10/22 Javascript
在element-ui的el-tree组件中用render函数生成el-button的实例代码
2018/11/05 Javascript
利用Promise自定义一个GET请求的函数示例代码
2019/03/20 Javascript
微信小程序录音实现功能并上传(使用node解析接收)
2020/02/26 Javascript
[02:28]DOTA2 2015国际邀请赛中国区预选赛首日现场百态
2015/05/26 DOTA
[02:57]DOTA2亚洲邀请赛 SECRET战队出场宣传片
2015/02/07 DOTA
Python3实现从指定路径查找文件的方法
2015/05/22 Python
Python 3.8 新功能全解
2019/07/25 Python
解决tensorflow由于未初始化变量而导致的错误问题
2020/01/06 Python
python框架Django实战商城项目之工程搭建过程图文详解
2020/03/09 Python
Python叠加矩形框图层2种方法及效果
2020/06/18 Python
详解python 支持向量机(SVM)算法
2020/09/18 Python
详解Pytorch显存动态分配规律探索
2020/11/17 Python
澳洲健康食品网上商店:Aussie Health Products
2018/06/15 全球购物
戴森英国官网:Dyson英国
2019/05/07 全球购物
施华洛世奇西班牙官网:SWAROVSKI西班牙
2019/06/06 全球购物
大学生怎样写好自荐信
2014/02/25 职场文书
《长江之歌》教学反思
2014/04/17 职场文书
森林防火标语
2014/06/23 职场文书
司机岗位职责说明书
2014/07/29 职场文书
整改报告怎么写
2014/11/06 职场文书
赔偿协议书
2015/01/27 职场文书
Java实现超大Excel文件解析(XSSF,SXSSF,easyExcel)
2022/07/15 Java/Android
Linux中一对多配置日志服务器的详细步骤
2022/07/23 Servers