有時(shí),一個(gè) URL 網(wǎng)址需要重定向到另一個(gè) URL 網(wǎng)址。你可以通過創(chuàng)建一個(gè)新的唯一任務(wù)是重定向的控制器動(dòng)作來實(shí)現(xiàn)它,但使用的 FrameworkBundle 的 RedirectController 會(huì)更容易。
你可以使用網(wǎng)頁名稱(如 homepage )來重定向到一個(gè)特定的路徑(例如 /about )或一個(gè)特定的路由。
假定您的應(yīng)用程序的 / 路徑?jīng)]有默認(rèn)控制器,并且您希望將這些請(qǐng)求重定向到 /app 。您將需要使用 [urlRedirect()](http://api.symfony.com/2.7/Symfony/Bundle/FrameworkBundle/Controller/RedirectController.html#urlRedirect()) 方法來重定向到這個(gè)新的 URL:
YAML:
# app/config/routing.yml
# load some routes - one should ultimately have the path "/app"
AppBundle:
resource: "@AppBundle/Controller/"
type: annotation
prefix: /app
# redirecting the root
root:
path: /
defaults:
_controller: FrameworkBundle:Redirect:urlRedirect
path: /app
permanent: true
XML:
<!-- app/config/routing.xml -->
<?xml version="1.0" encoding="UTF-8" ?>
<routes xmlns="http://symfony.com/schema/routing"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/routing
http://symfony.com/schema/routing/routing-1.0.xsd">
<!-- load some routes - one should ultimately have the path "/app" -->
<import resource="@AppBundle/Controller/"
type="annotation"
prefix="/app"
/>
<!-- redirecting the root -->
<route id="root" path="/">
<default key="_controller">FrameworkBundle:Redirect:urlRedirect</default>
<default key="path">/app</default>
<default key="permanent">true</default>
</route>
</routes>
PHP:
// app/config/routing.php
use Symfony\Component\Routing\RouteCollection;
use Symfony\Component\Routing\Route;
$collection = new RouteCollection();
// load some routes - one should ultimately have the path "/app"
$appRoutes = $loader->import("@AppBundle/Controller/", "annotation");
$appRoutes->setPrefix('/app');
$collection->addCollection($appRoutes);
// redirecting the root
$collection->add('root', new Route('/', array(
'_controller' => 'FrameworkBundle:Redirect:urlRedirect',
'path' => '/app',
'permanent' => true,
)));
return $collection;
在這個(gè)例子中,你為 / 路徑設(shè)置一個(gè)路由,讓 RedirectController 將它重定向到 /app 。那么永久性的開關(guān)告訴動(dòng)作發(fā)出 301 HTTP 狀態(tài)代碼代替默認(rèn)的 302 HTTP 狀態(tài)代碼。
假設(shè)你正將你的網(wǎng)站從 WordPress 遷徙到 Symfony,你想重定向 /wp-admin 的路徑到 sonata_admin_dashboard 的路由,但是你不知道路徑,只知道路由名稱。那么此時(shí)可以使用 [redirect()](http://api.symfony.com/2.7/Symfony/Bundle/FrameworkBundle/Controller/RedirectController.html#redirect()) 方法來實(shí)現(xiàn):
YAML:
# app/config/routing.yml
# ...
# redirecting the admin home
root:
path: /wp-admin
defaults:
_controller: FrameworkBundle:Redirect:redirect
route: sonata_admin_dashboard
permanent: true
XML:
<!-- app/config/routing.xml -->
<?xml version="1.0" encoding="UTF-8" ?>
<routes xmlns="http://symfony.com/schema/routing"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/routing
http://symfony.com/schema/routing/routing-1.0.xsd">
<!-- ... -->
<!-- redirecting the admin home -->
<route id="root" path="/wp-admin">
<default key="_controller">FrameworkBundle:Redirect:redirect</default>
<default key="route">sonata_admin_dashboard</default>
<default key="permanent">true</default>
</route>
</routes>
PHP:
// app/config/routing.php
use Symfony\Component\Routing\RouteCollection;
use Symfony\Component\Routing\Route;
$collection = new RouteCollection();
// ...
// redirecting the root
$collection->add('root', new Route('/wp-admin', array(
'_controller' => 'FrameworkBundle:Redirect:redirect',
'route' => 'sonata_admin_dashboard',
'permanent' => true,
)));
return $collection;
因?yàn)槟阈枰囟ㄏ虻揭粋€(gè)路由而不是一個(gè)路徑,所需的選項(xiàng)被稱為重定向的行為路徑,而不是在 url 重定向中的行為路徑。