我正在构建一个小型应用,需要将旧网址重定向到Lumen提供的更新更清晰的网址。
基本上我想路由并可能给它301重定向。
/something.php?id=1 -> /somethings/1
问题是这段代码似乎不起作用:
$app->get('/something.php?id={id}', function ($id) {
redirect()->route('somethings', ['id' => $id]);
});
此路线是我想将其重定向到:
$app->get('somethings/{id}', [
'as' => 'somethings', 'uses' => 'SomeController@show'
]);
这应该可行,但我似乎无法管理它。
如果那更好的话,我也会去.htaccess路线。
将此代码段添加到public/.htaccess
文件中似乎也无效。
RewriteRule something\.php?id=(.+)$ somethings/$1 [R=301,L]
我对重写不是很方便,所以我可能会在这里错过一些错误。
有人想指出我正确的方向吗?
答案 0 :(得分:1)
你可以在Lumen本身做,但如果你使用.htaccess
它会更快:
RewriteCond %{QUERY_STRING} ^id=(\d+)$
RewriteRule ^something.php$ /somethings/%1 [R=301,L]
上述内容应位于RewriteEngine On
下方。此外,您应该知道条件仅适用于后面的规则。所以,如果你想检查另一个URI和查询字符串,你需要重复上面的内容。
如果您更喜欢使用流明,可以将其添加到路由配置中:
$app->get('something.php', function() use ($app) {
$request = $app['request'];
$param = 'id';
if ($request->has($param)) {
if (preg_match('/[0-9]+/', $request->input($param))) {
return redirect()->route('somethings', ['id' => $request->input($param)]);
}
}
});
答案 1 :(得分:0)
如果您只想从旧网址获取request
的值,则可以在路由中解析id
服务,并从那里获取$app->get('somethings.php',function() use ($app){
dd($app['request']->id);
});
//localhost/somethings.php?id=1 ---> return "1"
的值。像这样:
{{1}}
答案 2 :(得分:0)
您没有使用return
关键字,应该是:
return redirect()->route('somethings', ['id' => $id]);
而不是
redirect()->route('somethings', ['id' => $id]);
答案 3 :(得分:0)
如果您使用的是Homestead,它会将nginx作为Web服务器运行,而不是Apache。 .htaccess特定于Apache。