как использовать тонкое перенаправление

У меня проблема. Я использую slim, и у меня есть маршрут для моей главной страницы:

$app->get('/', function() use ($app) { ... 

В одном из моих контроллеров я хочу перенаправить на главную страницу, поэтому я пишу

 $app->response->redirect('/', 303); 

Но вместо перенаправления на маршрут «/» я перенаправляюсь в корень моего локального сервера, который является http://localhost/

Что я делаю не так? Как использовать метод перенаправления?

Slim позволяет вам называть маршруты, а затем перенаправлять их обратно на основе этого имени, используя urlFor() . В вашем примере измените свой маршрут на:

 $app->get('/', function() use ($app) { ... })->name("root"); 

и тогда ваше перенаправление будет:

 $app->response->redirect($app->urlFor('root'), 303); 

Дополнительную информацию см. В справочниках Route в документации Slim.

Из документов Slim3 http://www.slimframework.com/docs/start/upgrade.html

 $app->get('/', function ($req, $res, $args) { return $res->withStatus(302)->withHeader('Location', 'your-new-uri'); }); 

Slim 3

return $ response-> withRedirect ($ url).

дать вашему '/' маршруту имя,

 $app = new \Slim\Slim(); $app->get('/', function () { echo "root page"; })->name('root'); $app->get('/foo', function () use ($app) { $app->redirect($app->urlFor('root') ); }); $app->run(); 

Это должно дать вам правильный URL-адрес для перенаправления

http://docs.slimframework.com/routing/names/ http://docs.slimframework.com/routing/helpers/#redirect

 //Set Default index or home page $app->get('/', function() use ($app) { $app->response->redirect('login.php'); }); 

Для Slim v3.x:

Используйте $response->withStatus(302)->withHeader('Location', $url); вместо $app->redirect();

В Slim v2.x можно использовать вспомогательную функцию $ app-> redirect (); для запуска запроса перенаправления. В Slim v3.x можно сделать то же самое с использованием класса Response (см. Следующий пример) [1].

Используйте pathFor() вместо urlFor() :

urlFor () был переименован в pathFor () и может быть найден в объекте маршрутизатора. Кроме того, pathFor () – это базовый путь [2].

Пример:

 $app->get('/', function ( $request, $response, $args ) use ( $app ) { $url = $this->router->pathFor('loginRoute'); return $response->withStatus(302)->withHeader('Location', $url); }); 

Примечание: дополнительные параметры могут быть предоставлены путем передачи ассоциативного массива имен параметров и значений в качестве второго аргумента метода pathFor() : $this->router->pathFor('viewPost', ['id' => 1]); ,

Метод pathFor () маршрутизатора принимает два аргумента:

  1. Название маршрута
  2. Ассоциативный массив заполнителей шаблонов маршрутов и значения замещения [3]

Рекомендации:

  1. Изменено перенаправление
  2. urlFor () теперь pathFor () в маршрутизаторе
  3. Названия маршрутов

Я думаю использование ./ вместо / будет работать.

Я думаю, что я столкнулся с аналогичной проблемой, и проблема была в моем файле конфигурации .htaccess . На самом деле это должно быть примерно так:

 RewriteEngine On RewriteBase /api #if your web service is inside a subfolder of your app, # you need to pre-append the relative path to that folder, hope this helps you! RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php [QSA,L]