关于Laravel Route重定向的一个注意点
2017-01-16 14:50
501 查看
发现问题
最近在做项目发现一个奇怪的现象,我的路由配置里有如下配置:
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重定向的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。
您可能感兴趣的文章:
相关文章推荐
- Openh323和Windows平台上关于G.723.1编码需要注意的一个问题
- 关于default constructor一个要注意的地方
- 关于jboss 5.0.0 上配置数据源要注意的一个问题 Java获取JBOSS数据源
- 注意访问器中的一个小细节,关于有访问器没有成员变量的问题
- 一个关于dup、dup2 文件描述符重定向函数的程序
- 一个关于重定向的问题研究,应该具有实用性
- 关于vim文件格式的一个需要注意的地方
- 关于结构体初始化需要注意的一个细节
- 关于结构体初始化需要注意的一个细节
- 关于相对布局中控件摆放位置的一个需要注意的小地方
- 关于Flex使用Blazeds连接Java后台的一个注意笔记
- 关于jboss 5.0.0 上配置数据源要注意的一个问题
- 关于反射Assembly.LoadFrom方法一个注意点
- 关于在一个工程中使用多个文件的一些注意
- Verilog 关于用task仿真应注意的一个问题
- 关于水晶报表导出到PDF格式的一个注意事项
- asp.net3.5关于FileUpload控件的一个注意点的思考
- 关于函数调用的一个注意点
- 关于zpl指令一个注意点
- 关于cocos2dx,多个图块集下的CCTMXTiledMap要注意的一个小地方