關(guān)于Laravel Route重定向的一個(gè)注意點(diǎn)
發(fā)現(xiàn)問(wèn)題
最近在做項(xiàng)目發(fā)現(xiàn)一個(gè)奇怪的現(xiàn)象,我的路由配置里有如下配置:
Route::group(array('prefix'=>'admin','before'=>'adminauth'),function(){ // 管理員登錄 Route::get('/',function(){ return Redirect::to('admin/login'); }); Route::get('login','UserController@adminLogin'); }
目的是無(wú)論用戶輸入”admin”,還是”admin/login”都能跳轉(zhuǎn)到登錄界面。然而現(xiàn)實(shí)情況是輸入”admin”之后,瀏覽器會(huì)無(wú)限重定向,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 ....
經(jīng)過(guò)一番搜索后試驗(yàn),終于得出結(jié)論,問(wèn)題有兩點(diǎn):
1.public目錄下正好有個(gè)admin目錄,存放后臺(tái)相關(guān)js和css
2.laravel自帶的.htaccess的這樣一條規(guī)則:
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]
解釋一下原理:
訪問(wèn)public/admin目錄時(shí),apache會(huì)自動(dòng)轉(zhuǎn)成”public/admin/”的形式,而這種形式正好符合重寫的規(guī)則,又被重寫回”public/admin”的形式。因?yàn)閜ublic/admin目錄確實(shí)存在,所以請(qǐng)求根本不會(huì)到達(dá)index.php。
所以故事就是這樣,因?yàn)?01那條規(guī)則的存在,無(wú)限重定向產(chǎn)生了。
解決方案:
1.不要把public目錄下已有的目錄名做為路由地址
2.301規(guī)則前加一條”RewriteCond %{REQUEST_FILENAME} !-d”,但是這樣會(huì)使該目錄被直接訪問(wèn)。建議生產(chǎn)環(huán)境中關(guān)掉apache的autoindex模塊(呃,我發(fā)現(xiàn)我用的wamp關(guān)掉這個(gè)模塊apache就啟動(dòng)不了了- -!)。
補(bǔ)充:
經(jīng)過(guò)一些實(shí)驗(yàn),建議將.htaccess文件改成如下:
RewriteEngine On # Redirect Trailing Slashes... RewriteCond %{REQUEST_FILENAME} !-d #防止真實(shí)目錄導(dǎo)致循環(huán)重定向 RewriteRule ^(.*)/$ /public/$1 [L,R=301] # Handle Front Controller... #RewriteCond %{REQUEST_FILENAME} !-d #防止用戶直接打開(kāi)真實(shí)目錄 RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L]
總結(jié)
以上就是關(guān)于Laravel Route重定向的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流。
相關(guān)文章
Laravel 手動(dòng)開(kāi)關(guān) Eloquent 修改器的操作方法
這篇文章主要介紹了Laravel 手動(dòng)開(kāi)關(guān) Eloquent 修改器的操作方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12Yii2實(shí)現(xiàn)同時(shí)搜索多個(gè)字段的方法
這篇文章主要介紹了Yii2實(shí)現(xiàn)同時(shí)搜索多個(gè)字段的方法,結(jié)合實(shí)例形式分析了Yii2中同時(shí)搜索多個(gè)字段所使用的函數(shù)與具體使用方法,需要的朋友可以參考下2016-08-08PHPStrom 新建FTP項(xiàng)目以及在線操作教程
PhpStorm是一個(gè)輕量級(jí)且便捷的PHP IDE,其提供的智能代碼補(bǔ)全,快速導(dǎo)航以及即時(shí)錯(cuò)誤檢查等功能大大提高了編碼效率。它是一款商業(yè)的 PHP 集成開(kāi)發(fā)工具,以其獨(dú)特的開(kāi)發(fā)便利性,短時(shí)間內(nèi)贏得了大量PHPer的青睞。今天我們來(lái)詳細(xì)學(xué)習(xí)下FTP相關(guān)的操作2016-10-10使用laravel和ajax實(shí)現(xiàn)整個(gè)頁(yè)面無(wú)刷新的操作方法
今天小編就為大家分享一篇使用laravel和ajax實(shí)現(xiàn)整個(gè)頁(yè)面無(wú)刷新的操作方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-10-10TP5.0框架實(shí)現(xiàn)無(wú)限極回復(fù)功能的方法分析
這篇文章主要介紹了TP5.0框架實(shí)現(xiàn)無(wú)限極回復(fù)功能的方法,結(jié)合實(shí)例形式分析了thinkPHP5.0框架下無(wú)限極回復(fù)功能相關(guān)的數(shù)據(jù)庫(kù)、評(píng)論功能及界面布局實(shí)現(xiàn)方法,需要的朋友可以參考下2019-05-05支持中文和其他編碼的php截取字符串函數(shù)分享(截取中文字符串)
這篇文章主要介紹了支持中文和其他編碼的php截取字符串函數(shù)示例(截取中文字符串),需要的朋友可以參考下2014-03-03