2010-12-01 23 views
0

J'ai un site web plutôt ancien dont j'ai trop besoin pour refaire le refonte. Les anciennes URL n'ont pas de cohérence de nommage pour moi afin de créer une sorte de règle. Est-il possible d'avoir un routeur/contrôleur qui redirige ($ this -> _ forward()) les anciennes URL vers leur nouvel emplacement?Utilisation du framework Zend pour rediriger/transférer (similaire à l'état 301) d'anciennes URL vers de nouveaux contrôleurs/actions

Par exemple, quand j'appelle http://www.example.com/this-is-a-url-with-a-random-name.php il transmettra à http://www.example.com/url/random-name ...

Peut-être que ce match pourrait exister dans un tableau si la clé serait l'ancienne URL et la valeur serait le nouvel emplacement? Ou est-ce que j'essaie simplement de réinventer la roue et je devrais m'en tenir aux bonnes règles d'ol '.htaccess avec les redirections 301?

(je l'espère, tout cela est logique?)

Cheers, Ange

+0

Connaissez-vous ou avez-vous un moyen de connaître toutes les URL affectées? – Hannes

+0

Oui, je vais devoir créer une liste de toutes les anciennes URL et où elles pointeront quand même. (Ça va être ennuyeux ...: /) – AngelP

Répondre

1

Je vais commencer en recommandant l'utilisation de votre config apache pour placer les réécritures si possible. C'est beaucoup plus rapide que d'utiliser .htaccess et votre application Zend Framework.

Je dirai également que vous voulez utiliser les redirections 301 car elles sont les meilleures pour les moteurs de recherche lorsque votre contenu a été déplacé de façon permanente. Si vous souhaitez utiliser votre application Zend Framework pour ce faire et si vous avez un tas d'URL qui peuvent avoir des structures différentes, le meilleur endroit est dans le contrôleur d'erreur par défaut comme un «dernier effort». La raison en est que si vous avez une URL /myoldurl qui n'existe pas maintenant (mais qui est sur votre liste de redirection) et que vous l'implémentez dans le futur comme son propre contrôleur/module - votre contrôleur prendra automatiquement le relais.

intérieur errorAction() il y a un interrupteur qui décide si votre erreur est un 404 ou un 500.

A l'intérieur du bloc 404, vous pouvez ajouter du code à faire une redirection. Ce code n'est pas complet, regardez-le et insérez les données manquantes si nécessaire.

// [code omitted] 
     switch ($errors->type) { 
      case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE: 
      case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER: 
      case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION: 
       // this is the original request string ie: /myoldurl 
       $pathinfo = $this->_request->getPathInfo(); 

       // decide if pathinfo is in your redirect list 
       if ($pathinfo is in some list of old urls) { 
        // and get $newurl from your list 
        $newurl = something from a list of new urls; 

        // set redirect code to 301 instead of default 302 
        $this->_helper->redirector->setCode(301); 
        $this->_redirect($newurl); 
       } 
       // 404 error -- controller or action not found 
       $this->getResponse()->setHttpResponseCode(404); 
       $this->view->message = 'Page not found'; 
       break; 
//[...] 
+0

Bonjour, merci beaucoup pour cela et excuses que je ne suis pas revenu à vous plus tôt. Je pense que je vais essayer d'implémenter la solution ZF au lieu de la solution htaccess seulement parce que je pense que ce sera un peu plus facile à maintenir/polyvalent et que j'aurai l'occasion de faire de la consignation détaillée - si jamais je décide à! – AngelP