2013-04-06 41 views
3

我正在Laravel 4 Beta 5中開發一個網站,並試圖將編碼的URL傳遞給路由器。問題是,編碼的URL有百分比等,所以它被Laravel阻止。該URL使用Javascript函數encodeURIComponent()進行編碼。接受Laravel 4路由中的編碼URL

有沒有辦法重寫Laravel,這樣我就可以在我的路線中使用任何字符?

這是我當前的代碼:

Route::get('add/{encoded_url}', function($encoded_url) 
{ 
    return 'The URL is: '.rawurldecode($encoded_url); 
}); 

我試圖通過附加where('encoded_url', '*reg-ex*');覆蓋Laravel,但它沒有工作(我不是很好的REG-EX,順便說一句)。

回答

12

給這個表達式一去,它會匹配任何字符 ...

Route::get('add/{encoded_url}', function($encoded_url) 
{ 
    return 'The URL is: '.rawurldecode($encoded_url); 
})->where('encoded_url', '.*'); 
+0

是的,這工作。非常感謝你! – spacek33z 2013-04-21 15:39:21

+0

太好了,這也適用於我。但是,當我使用「正常的」urlencode但是當我嘗試rawurlencode並解碼它像魅力一樣工作時,它沒有。 +1 – rofavadeka 2015-01-15 19:01:38

2

菲爾的回答是正確的,但我也不得不使我的Apache設置的變化得到這個工作。

我有以下添加到我的httpd.conf文件:

AllowEncodedSlashes NoDecode 

你需要這個,如果你看到一個Apache找不到404頁,而不是一個Laravel NotFoundHttpException錯誤頁面。

很明顯的解釋,但沒有這個阿帕奇編碼的斜線解碼,使

http://localhost/add/http%2F%2Fwww.google.co.uk 

在路由到

http://localhost/add/http://www.google.co.uk