亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Laravel 路由時如何防止出現多個斜杠?

Laravel 路由時如何防止出現多個斜杠?

PHP
波斯汪 2023-07-01 13:04:37
如何在 Laravel 路由過程中防止出現多個斜杠?http://localhost/page/1 - 工作并且它工作... http://localhost/////page/1 - 應該返回 404 或重定向 此錯誤也出現在 Laravel 網站上。 https://laravel.com////docs/5.5/errors#http-exceptions
查看完整描述

1 回答

?
慕桂英4014372

TA貢獻1871條經驗 獲得超13個贊

需要明確的是,這不是一個錯誤。錯誤意味著這是框架開發人員明確表示不應該發生但實際上發生的事情。這主要是一種未定義的行為。

發生這種情況的原因是請求如何確定當前路徑:

Request::path()

public function path()

{

? ? $pattern = trim($this->getPathInfo(), '/');

? ? return $pattern == '' ? '/' : $pattern;

}

這將從/當前路徑信息中修剪以獲取路徑。這并不是一件不合理的事情,因為您通常不需要前導和尾隨斜杠,但這會導致具有許多前導和尾隨斜杠的路徑也可以像 https://laravel.com////docs 一樣工作/5.5/errors/////#http-exceptions

發生這種情況的原因是因為返回的標準路由驗證器Route::getValidators()(特別是使用的 UriValidator?$request->path()

如果你真的必須堅持“修復”這個問題,那么你可以添加一個自定義驗證器來檢查這個確切的事情:

class MyUriValidator implements ValidatorInterface? {


? ? public function matches(Route $route, Request $request)

? ? {

? ? ? ? $path = $request->getPathInfo();

? ? ? ? return preg_match($route->getCompiled()->getRegex(), rawurldecode($path));

? ? }

}

然后您可以在您的中注冊這個額外的驗證器AppServiceProvider:


public function boot() {

? ? Route::$validators = array_merge(Route::getValidators(), [ new MyUriValidator ]);

}


查看完整回答
反對 回復 2023-07-01
  • 1 回答
  • 0 關注
  • 151 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號