In my Yii2 config I have:
'components' => [ 'urlManager' => [ 'baseUrl' => '', 'enablePrettyUrl' => true, 'showScriptName' => false, 'rules' => [ 'search' => 'site/index', ... ], ...
If I go to site.com/search
it works. If I go to site.com/site/index
it also works and shows the same content. How to redirect the call instead of just showing the response of site/index? It must also redirect with params (site.com/site/index?param=1
-> site.com/search?param=1
)
Advertisement
Answer
The UrlManager does not redirect. It rather does a rewrite like a web server. It is called routing.
If you would like to do a redirect in your code you can use Response::redirect()
. If you don’t have a SearchController
where you can put this statement in an action, you can place it into the beforeAction
event. You can do this in your configuration array:
Option #1
[ 'components' = [ ... ], 'on beforeAction' => function ($event) { if(Yii::$app->request->pathInfo === 'search') { $url = 'site/index?' . Yii::$app->request->queryString; Yii::$app->response->redirect($url)->send(); $event->handled = true; } } ]
Option #2
Or if you have SearchController
use:
class SearchController extends yiiwebController { public function actionIndex() { $url = 'site/index?' . Yii::$app->request->queryString; return $this->redirect($url); } }
Option #3
Third option is to configure the web server to do the redirect. That would be the fastest solution.