2011-08-21 1 views
4

J'ai réécrit mon site dans Cakephp et j'ai choisi de garder la nouvelle structure de Cakephp. Je me demandais si je pouvais utiliser le routage dans Cakephp pour le routage 301 (déplacé de façon permanente).Quel est le meilleur moyen de rediriger 301 pages dans CakePHP?

Je souhaite rediriger resources.php, languages.php, clips.php, éventuellement * .php, vers/resources /,/languages ​​/,/clips.

Ce type de redirection 301 peut-il être facilement effectué dans CakePHP? Je pourrais même écrire une interface d'administration simple pour ajouter des liens 301, par ex. à partir d'une table MySQL pour administrer facilement les redirections. Ou est-il préférable de le faire manuellement via mod_rewrite?

Répondre

8

Je ne suis pas sûr de la meilleure façon, mais je voudrais d'abord mettre le routage à des itinéraires php comme:

Router::connect('/resources.php', array(
    'controller' => 'resources', 
    'action' => 'index' 
    ) 
); 

(et ainsi de suite)

Une fois cette vérification au début de la fonction d'action quelle route a été utilisé, et si * .php itinéraire a été utilisé faire une redirection 301:

$this->redirect(array('controller' => 'resources', 'action' => 'index'), 301); 

Je suppose qu'il ya moyen de mettre en œuvre cela, mais ce fut l'idée est « plus intelligent ». (utilisation de before_filter etc.)

1

Depuis CakePhp 2.x, il existe une méthode Router::redirect().

Ainsi, vous pouvez ajouter la redirection dans vos déroutes:

Router::redirect(
    '/resources.php', 
    array(
     'controller' => 'resources', 
     'action' => 'index' 
    ), 
    array('status' => 301) 
); 

Le troisième paramètre array('status'=>301) n'est pas nécessaire parce que 301-redirect est utilisé par défaut.

Voir Redirect routing — CakePHP Cookbook v2.x documentation.

+0

s'il s'agit d'une redirection, pourquoi le contrôleur et l'action sont-ils fournis? Merci! – Gediminas

+1

@Lucas, le deuxième argument est une URL de page de destination. Vous avez deux options pour spécifier ceci: soit une chaîne comme ''/landing/''ou un tableau spécifiant un contrôleur, une action (et, probablement, des paramètres) comme' array (' controller '=>' landing ',' action '= > 'index') 'pour que' Router' vous prépare l'url. –

Questions connexes