Regex Laravel不区分大小写路由
如何定义不区分大小写(部分)的路由? 例如:Regex Laravel不区分大小写路由,regex,laravel,laravel-4,case-insensitive,laravel-routing,Regex,Laravel,Laravel 4,Case Insensitive,Laravel Routing,如何定义不区分大小写(部分)的路由? 例如: 路由::get('/{userId}/profile') 很好 在路线的固定部分使用大写字母不起作用: 不起作用 不起作用 我了解如何使用->with()使{parameter}等参数使用正则表达式模式,但这对路由的固定部分没有帮助,如上所述。这可以通过以下方式定义路由来解决: Route::get('/{userId}/{profile}')->with('profile', '(?i)profile(?-i)'); 更聪明的是,将
- 路由::get('/{userId}/profile')李>
- 很好
- 不起作用
- 不起作用
我了解如何使用->with()使{parameter}等参数使用正则表达式模式,但这对路由的固定部分没有帮助,如上所述。这可以通过以下方式定义路由来解决:
Route::get('/{userId}/{profile}')->with('profile', '(?i)profile(?-i)');
更聪明的是,将其定义为模式
,这样它也可以在路由组中使用
Route::pattern('profile', '(?i)profile(?-i)');
Route::get('/{userId}/{profile}');
添加模式一次只能在一个路由上工作,如果您希望所有路由都不区分大小写,请将其添加到before部分的/app/filter.php文件中: 我写了一个要点,就是:
编辑app/filters.php以检查路由中的大写字符,并将它们重定向到已转换的路由。对于使用Apache的用户,您也可以执行以下操作: 此时,在vhost文件的顶部添加
RewriteEngine On
RewriteMap lowercase int:tolower
并在您的.htaccess
RewriteCond $1 [A-Z]
RewriteRule ^(.*)$ /${lowercase:$1} [R=301,L]
严格地说,使用参数和正则表达式可以帮助解决您的特定问题(将profile转换为动态参数,不敏感地指定它必须是单词“profile”的大小写),但我知道这远不是理想的解决方案。虽然有明确的权宜之计。固定部分不能区分大小写,但如果它是一个动态参数,您可以已经这样做了。您是否尝试过类似于
Route::get({userId}/{profile},'Controller@action')->其中('profile','/profile/i')代码>?很好。我喜欢模式解决方案这对我刚才很有帮助。谢谢。在第一个示例中,您是指->where()
而不是->with()
where
通过使用路由正则表达式来工作,而在Laravel 5.3with
中,调用undefined method Illumb\Routing\route::with()
会导致错误我没有尝试上述解决方案,只是开始考虑URL到小写的一般转换:一些路由可能需要混合大写/小写,例如,通过URL传递区分大小写的参数(例如某些哈希类型等)。