服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|JavaScript|易语言|

服务器之家 - 编程语言 - PHP教程 - 关于Laravel Route重定向的一个注意点

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

2021-04-15 16:24sosonemo PHP教程

这篇文章主要给大家介绍了关于Laravel Route重定向的一个注意点,文中给出了详细的示例代码,有需要的朋友可以参考借鉴,下面来一起看看吧。

发现问题

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

?
1
2
3
4
5
6
7
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记录如下:

?
1
2
3
4
5
6
7
8
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的这样一条规则:

?
1
2
3
4
5
6
7
8
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文件改成如下:

?
1
2
3
4
5
6
7
8
9
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重定向的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

原文链接:https://sosonemo.me/laravel-route-pitfall.html

延伸 · 阅读

精彩推荐
  • PHP教程php将session放入memcached的设置方法

    php将session放入memcached的设置方法

    这篇文章主要介绍了php将session放入memcached的设置方法,需要的朋友可以参考下 ...

    服务器之家3522020-06-10
  • PHP教程php 模拟POST|GET操作实现代码

    php 模拟POST|GET操作实现代码

    很早的时候,参加面试,需要使用php的函数模拟一个post访问。尽管对php很熟悉,但是由于面试之前很长时间没有使用php语言,所以就没有答上来。 ...

    php代码网3562019-11-04
  • PHP教程PHP PDOStatement::execute讲解

    PHP PDOStatement::execute讲解

    今天小编就为大家分享一篇关于PHP PDOStatement::execute讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看...

    php参考手册5172019-06-24
  • PHP教程PHP中file_exists()判断中文文件名无效的解决方法

    PHP中file_exists()判断中文文件名无效的解决方法

    这篇文章主要介绍了PHP中file_exists()判断中文文件名无效的解决方法,是很多PHP开发人员都会遇到的问题,主要涉及对编码的转换,需要的朋友可以参考下...

    PHP教程网1582020-08-10
  • PHP教程PHP 获取远程文件大小的3种解决方法

    PHP 获取远程文件大小的3种解决方法

    以下是对PHP中获取远程文件大小的3种解决方法进行了详细的介绍,需要的朋友参考下 ...

    PHP教程网2282020-05-10
  • PHP教程PHP文章采集URL补全函数(FormatUrl)

    PHP文章采集URL补全函数(FormatUrl)

    写此函数作用就是为了开发采集程序,采集文章的时候会经常遇到页面里的路径是 相对路径 或者 绝对根路径 不是 绝对全路径 就无法收集URL ...

    php教程网2412020-01-06
  • PHP教程mysql_escape_string()函数用法分析

    mysql_escape_string()函数用法分析

    这篇文章主要介绍了mysql_escape_string()函数用法,结合实例形式讲述了mysql_escape_string()函数的功能,并分析了mysql_escape_string的使用技巧与注意事项,需要的朋友可...

    manny10742021-01-12
  • PHP教程PHP daddslashes 使用方法介绍

    PHP daddslashes 使用方法介绍

    PHP提供两个方便我们引用数据的魔法引用函数magic_quotes_gpc和magic_quotes_runtime,这两个函数如果在php.ini设置为ON的时候,就会为我们引用的数据碰到 单引号...

    PHP教程网2282020-01-15