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.3
with
中,调用undefined method Illumb\Routing\route::with()
会导致错误
我没有尝试上述解决方案,只是开始考虑URL到小写的一般转换:一些路由可能需要混合大写/小写,例如,通过URL传递区分大小写的参数(例如某些哈希类型等)。