将旧的.php URL路由到Lumen的干净URL

时间:2015-07-08 23:48:30

标签: php .htaccess laravel redirect lumen

我正在构建一个小型应用,需要将旧网址重定向到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]

我对重写不是很方便,所以我可能会在这里错过一些错误。

有人想指出我正确的方向吗?

4 个答案:

答案 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。