Url rewriting 在laravel 5.1 route拦截之前更改get url
在最终掌握了Laravel的关键部分之后,我准备重构我所有的过程代码 我有一个问题,其他一些程序使用以下url: 据我所知,laravel路线如下:Url rewriting 在laravel 5.1 route拦截之前更改get url,url-rewriting,routing,laravel-5.1,pretty-print,Url Rewriting,Routing,Laravel 5.1,Pretty Print,在最终掌握了Laravel的关键部分之后,我准备重构我所有的过程代码 我有一个问题,其他一些程序使用以下url: 据我所知,laravel路线如下: 我应该如何在laravel中截取旧样式的url,或者在调用laravel路由并翻译它之前截取旧样式的url,以便路由能够处理它?只要您只使用GET执行此操作,您就可以使用中间件来解决您的问题 创建中间件 php artisan make:middleware RedirectIfOldUrl …或者随便你怎么称呼它 将定义添加到您的应用程序/H
我应该如何在laravel中截取旧样式的url,或者在调用laravel路由并翻译它之前截取旧样式的url,以便路由能够处理它?只要您只使用
GET
执行此操作,您就可以使用中间件来解决您的问题
创建中间件
php artisan make:middleware RedirectIfOldUrl
…或者随便你怎么称呼它
将定义添加到您的应用程序/Http/Kernel.php
将\App\Http\Middleware\RedirectIfOldUrl::class,
添加到$Middleware
数组(而不是$routeMiddleware
)数组中
这将导致在每次请求时调用中间件
处理请求
public function handle($request, Closure $next)
{
if (str_contains($request->getRequestUri(), '.php?')) {
//Remove .php from the request url
$url = str_replace('.php', '', $request->url());
foreach ($request->input() as $key => $value) {
$url .= "/{$key}/{$value}";
}
return redirect($url);
}
return $next($request);
}
以上是一个非常基本的实现,或者您在问题中提到的。您可能需要调整逻辑,使其完全适合您的应用程序,但它应该为您指明正确的方向
希望这有帮助 只要您只使用
GET
执行此操作,您就可以使用中间件来解决您的问题
创建中间件
php artisan make:middleware RedirectIfOldUrl
…或者随便你怎么称呼它
将定义添加到您的应用程序/Http/Kernel.php
将\App\Http\Middleware\RedirectIfOldUrl::class,
添加到$Middleware
数组(而不是$routeMiddleware
)数组中
这将导致在每次请求时调用中间件
处理请求
public function handle($request, Closure $next)
{
if (str_contains($request->getRequestUri(), '.php?')) {
//Remove .php from the request url
$url = str_replace('.php', '', $request->url());
foreach ($request->input() as $key => $value) {
$url .= "/{$key}/{$value}";
}
return redirect($url);
}
return $next($request);
}
以上是一个非常基本的实现,或者您在问题中提到的。您可能需要调整逻辑,使其完全适合您的应用程序,但它应该为您指明正确的方向
希望这有帮助 我在Laravel 6.2中使用这个中间件重写了路径,并将其添加到
app\Http\Kernel.php
:
<?php
namespace App\Http\Middleware;
use Closure;
class Localize
{
public function handle($request, Closure $next)
{
if(substr($_SERVER['REQUEST_URI'], 0, 4 ) === "/es/" || $_SERVER['REQUEST_URI'] === "/es") {
$request->server->set('REQUEST_URI', substr($_SERVER['REQUEST_URI'], 4));
app()->setLocale('es');
}
return $next($request);
}
}
我在Laravel 6.2中使用这个中间件重写了路径,并将其添加到app\Http\Kernel.php
:
<?php
namespace App\Http\Middleware;
use Closure;
class Localize
{
public function handle($request, Closure $next)
{
if(substr($_SERVER['REQUEST_URI'], 0, 4 ) === "/es/" || $_SERVER['REQUEST_URI'] === "/es") {
$request->server->set('REQUEST_URI', substr($_SERVER['REQUEST_URI'], 4));
app()->setLocale('es');
}
return $next($request);
}
}
看起来是一个很好的解决方案,我会尝试回去这是一个完美的解决方案,不能再投票一次,但在这种情况下会这么做。Ross-可以做类似的事情来修改请求吗。我想在路由器处理url之前修改它,而不是重定向它。。。因此/en/my-url和/es/my-url等都由/my-url处理route@Ben,IMO,如果它们将由同一个端点处理,只需使两条路由都指向该端点即可。@RossWilson是否可以处理请求而不是重定向。我现在有一个旧的终端,无法处理重定向。看起来像是一个解决方案,我会尝试回去这是一个完美的解决方案,不能再升级一次,但在这种情况下会这样做。罗斯-可以做类似的事来修改请求。我想在路由器处理url之前修改它,而不是重定向它。。。因此/en/my-url和/es/my-url等都由/my-url处理route@Ben,IMO,如果它们将由同一个端点处理,只需使两条路由都指向该端点即可。@RossWilson是否可以处理请求而不是重定向。我现在有一个旧的终端无法处理重定向。对我来说不起作用。它试图找到一个包含lang的路由,结果是一个404。@JeremyBelolo你把中间件添加到Kernal.php了吗<代码>\App\Http\Middleware\Localize::class,
当然:)可能与Laravel 8有所不同…@JeremyBelolo我在6.2中这样做了,尽管在set()之前使用$request->server getter会有问题,但我为此打开了一个问题,但它已经关闭了:我认为现在很明显没有合法的方法可以做到这一点。对我来说不起作用。它试图找到一个包含lang的路由,结果是一个404。@JeremyBelolo你把中间件添加到Kernal.php了吗\App\Http\Middleware\Localize::class,
当然:)可能与Laravel 8有所不同…@JeremyBelolo我在6.2中做了这件事,尽管在set()之前使用$request->server getter会有问题,但我为此打开了一个问题,但它已经关闭了:我认为现在很明显没有合法的方法来做这件事。