2009-05-27 9 views
1

J'ai un site web PHP5/Zend Framework 1.8.1, qui est situé à:Quelle est la meilleure façon d'effectuer une redirection 301 dans cette situation?

http://www.example.com/foo 

L'ancienne version de ce site, qui exaspérante, est toujours maintenu par l'index de Google est situé à:

http://www.example.com/foo/DEFAULT.ASP 

Alors beaucoup de gens demandent le lien ci-dessus et se retrouvent dans une impasse.

Je vois, la façon de résoudre ce problème serait d'émettre une redirection 301 pour l'emmener au nouveau site. Les deux façons de le faire que le printemps à l'esprit sont:

  1. La première façon dont je pensais était d'ajouter une règle de réécriture à notre .htaccess. Notre mise en œuvre du site est PHP5/Zend Framework 1.8.1, donc il y a une règle de réécriture existant dans le .htaccess (selon l'exigence Zend Framework MVC) qui est:

    RewriteRule !\.(js|ico|gif|jpg|png|css|jpeg)$ index.php 
    

    Comme un noob mod_rewrite, je l'ai fait un peu googler et est venu avec ce qui suit pour gérer la redirection:

    RewriteCond %{HTTP_HOST} ^/foo/DEFAULT.ASP 
    RewriteRule (.*) http://example.com/foo$1 [R=301,L] 
    

    j'ajouté ces lignes au .htaccess, mais ils ne fonctionnent pas.

  2. La deuxième façon dont je pensais est d'utiliser Zend_Router_Route_Static comme suit:

    $router = $frontController->getRouter(); 
    $route = new Zend_Controller_Router_Route_Static('foo/DEFAULT.ASP', array('controller' => 'foo', 'action' => 'index')); 
    $router->addRoute('foo', $route); 
    

    Cette redirige vers la bonne page, mais je ne sais pas comment définir ainsi un 301 en-tête, plus il est tout à fait inélégant ayant ces lignes de code dans mon bootstrap.php

quelqu'un peut-il offrir des conseils sur la façon de faire face à cette situation? Je voudrais savoir tout ou partie:

  1. Comment obtenir la règle de réécriture pour travailler
  2. Comment faire un « 301 » avec Zend_Controller_Router_Route si possible.
  3. Y a-t-il un autre moyen que je sois ?
  4. Quelle est la meilleure façon et pourquoi?
  5. Pourquoi Google ne comprend-il pas cela? Cela fait presque six mois.

Répondre

2

Cela devrait fonctionner (assurez-vous que vous mettez avant la règle Zend):

RewriteRule ^foo/DEFAULT.ASP /foo [R=301,L] 

Je ne sais pas pourquoi Google ne le découvrir - êtes-vous sûr que vous donnez un code d'état 404 approprié? Vous pouvez vérifier en regardant les en-têtes - dans Firefox, j'utilise Live HTTP Headers.

+0

Merci pour la réponse rapide, en train d'essayer maintenant. – karim79

+0

Je l'ai fait, mais cela n'a pas fonctionné, exactement le même résultat qu'avant. Une idée? – karim79

+0

L'avez-vous mis avant l'autre règle? – Greg

1
Redirect permanent /foo/DEFAULT.ASP /foo 
+0

Merci. J'ai essayé cela mais j'ai reçu une erreur interne de serveur! – karim79

2

J'ai récemment résolu un problème similaire en ajoutant

AddType application/x-httpd-php .asp 

dans le fichier .htaccess, ce qui rend le serveur exécuter des fichiers .asp avec php.

Puis j'ai créé un fichier default.asp contenant l'en-tête ('Location: /', etc) pour remplacer celui que Google cherchait. J'avais quelques autres fichiers .asp avec des paramètres complexes qui devaient être transformés en nouvelles URL avant de les rediriger, dans certains cas nécessitant une recherche de base de données, donc c'était pratique d'écrire tout en PHP pour pouvoir utiliser des fichiers d'autres parties du projet.

+0

+1 - Merci Steve, façon intéressante de résoudre le problème! Je n'aurais jamais pensé à ça! – karim79

1

On dirait que vous avez résolu votre problème, et ce ne serait pas une bonne solution pour votre problème, mais voici une autre ressource que d'autres pourraient trouver utiles si elles ont été attirés par ce fil par votre question:

http://www.refreshinglyblue.com/2008/10/28/zend-framework-redirect-the-easy-way/

Il suggère le "Redirector Zend Controller Action Helper" pour rediriger les URL internes.

P.S. Si quelqu'un utilise _redirect, assurez-vous de passer le code de redirection 301 (si c'est ce que vous voulez), car il est par défaut 302.

+0

J'essaie d'utiliser $ this -> _ redirect ($ url, array ('code' => 301)), mais je dans les en-têtes http je reçois 302 au lieu de 301. Une idée pourquoi? – Gavriel

+0

Essayez "return $ this -> _ redirect ($ url, array ('code' => 301));" – joedevon

Questions connexes