2010-04-21 3 views
1

J'ai créé un nouveau site Web pour une entreprise et je voudrais que tous les résultats des moteurs de recherche précédents soient redirigés. Comme il y avait pas mal de pages et que la plupart d'entre elles utilisaient un identifiant, je voudrais utiliser quelque chose de générique au lieu de rediriger toutes les anciennes pages.Cakephp, Route de vieux résultats de recherche google à la nouvelle page d'accueil

Ma première pensée était de le faire:

Router::connect('/*', array('controller' => 'pages', 'action' => 'display', 'home')); 

Et mettre cela à la fin du fichier routes.php [puisqu'il est priorisé] de sorte que toutes les demandes ne validant pas avec des actions précédentes d'itinéraire retournerait vrai avec celui-ci et rediriger vers la page d'accueil.

Cependant, cela ne fonctionne pas.

Lorsque j'utilise un chemin différent sur le routeur, il redirige avec succès. Par exemple, si je le donne:

Router::connect('/*', array('controller' => 'projects', 'action' => 'browser')); 

il fonctionne très bien. Le problème se pose lorsque le contrôleur utilisé est pages, affichage d'action, etc.

Je coller mon fichier routes.php [car il est petit] en espérant que quelqu'un pourrait me donner un indice:

Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home')); 

    Router::connect('/company/*', array('controller' => 'articles', 'action' => 'view')); 

    Router::connect('/contact/*', array('controller' => 'contacts', 'action' => 'view')); 

    Router::connect('/lang/*', array('controller' => 'p28n', 'action' => 'change')); 

    Router::connect('/eng/*', array('controller' => 'p28n', 'action' => 'shuntRequest', 'lang' => 'eng')); 

    Router::connect('/gre/*', array('controller' => 'p28n', 'action' => 'shuntRequest', 'lang' => 'gre')); 


    Router::parseExtensions('xml'); 
+0

Ce qui se passe lorsque vous vous connectez/* aux pages :: affichage? –

+1

J'essaierais probablement de m'attaquer à ceci dans un htaccess avec regex et d'émettre un # 30vis –

+0

#Travis Leleu, il reçoit ce message: "Not Found Erreur: L'adresse demandée '/ asdasdf' n'a pas été trouvée sur ce serveur." – ion

Répondre

2

Le plus gros problème est qu'une route ne rediriger, il relie les URL avec des réponses. En d'autres termes, il s'assure que vos URL non valides produisent toujours une page valide. Ce qui est exactement le contraire de ce que vous voulez réaliser.

Vous voulez dire aux visiteurs qu'une URL qui était valide n'est plus. Vous le faites en émettant les codes de réponse HTTP appropriés, 301 Moved Permanently dans ce cas. Sans cela, les URL apparaîtront toujours valables pour les moteurs de recherche et ils ne mettront pas à jour leur index.

Vous devez soit connecter toutes les URL non valides via Routes à une action de contrôleur qui émet un $this->redirect('...', 301) ou vous pouvez utiliser certaines règles .htaccess pour rediriger. Lequel utiliser dépend de la complexité de la redirection, mais vous serez probablement en mesure d'utiliser des règles simples .htaccess mod_rewrite.

Il y a suffisamment d'exemples sur le SO: https://stackoverflow.com/search?q=htaccess+301+redirect

3

Au lieu d'essayer de gérer tout dans le fichier de routage cakePHP, je vous recommande d'utiliser le fichier .htaccess pour rediriger 301 pages si nécessaire. Ce que vous avez ci-dessus ne transférera pas les classements, car pour autant que je puisse voir, aucune redirection 301 n'est produite dans les solutions basées sur les routes.php que vous avez proposées.

Questions connexes