Pergunta

Eu tenho um 1.8.1 web site PHP5 / Zend Framework, que está localizado em:

http://www.example.com/foo

A versão mais antiga deste site, que irritantemente, ainda é mantida pelo índice do Google foi localizado em:

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

Assim, um monte de pessoas estão solicitando o link acima e bater um beco sem saída.

I figura, a maneira de corrigir isso seria para emitir um redirecionamento 301 para levá-lo para o novo site. As duas maneiras de fazer isso que vêm à mente são:

  1. A primeira maneira que pensei foi para adicionar uma regra de reescrita para o nosso .htaccess. Nossa implementação site é PHP5 / Zend Framework 1.8.1, então não há uma regra existente reescrita no .htaccess (como por exigência do Zend Framework MVC), que é:

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

    Como um mod_rewrite noob, eu fiz um pouco de googling e veio com o seguinte para lidar com o redirecionamento:

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

    Eu adicionei essas linhas para o .htaccess, mas eles não funcionam.

  2. A segunda maneira que eu pensava é usar Zend_Router_Route_Static da seguinte forma:

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

    Isso redireciona para a página correta, mas não tenho idéia de como definir um cabeçalho 301, bem como, além disso, é bastante deselegante ter essas linhas de código na minha bootstrap.php

Alguém pode oferecer algum conselho sobre como lidar com esta situação? Eu gostaria de saber todos ou qualquer um:

  1. Como obter a regra de reescrita para o trabalho
  2. Como fazer um '301' com Zend_Controller_Router_Route se possível.
  3. Existe outra maneira que eu sou faltando?
  4. Qual é a melhor maneira e por quê?
  5. Por que não é o Google descobrir isso? Tem sido quase meio ano.
Foi útil?

Solução

Isso deve funcionar (certifique-se de colocá-lo antes que a regra Zend):

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

Eu não tenho certeza por que o Google não é descobrir isso - você está certo de que você está dando uma adequada código de status 404? Você pode verificar olhando os cabeçalhos - no Firefox Eu uso vivo cabeçalhos HTTP

.

Outras dicas

Recentemente, resolveu um problema semelhante, adicionando

AddType application/x-httpd-php .asp

para o arquivo .htaccess, o que torna os arquivos do servidor de execução ASP com php.

Então eu criei um default.asp arquivo contendo header ( 'Location: /', etc) para substituir o que o Google estava procurando. Eu tinha algumas outras arquivos.asp com parâmetros complexos que precisam ser transformados em novos URLs antes de redirecionar, em alguns casos que requerem uma pesquisa de banco de dados, por isso foi útil ser capaz de escrever tudo em PHP para que eu pudesse usar arquivos de inclusão de outras partes do projeto.

Redirect permanent /foo/DEFAULT.ASP /foo

Parece que você resolveu o seu problema, e isso não seria uma boa solução para o problema, mas aqui é outro recurso que outros podem achar útil se eles foram atraídos para esta discussão com sua pergunta:

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

Ele está sugerindo a "redirecionador Zend Controlador Auxiliar de Acção" para redirecionar URLs internas.

P.S. Se alguém faz uso _redirect, certifique-se de passar o código de redirecionamento 301 (se é isso que você quer), já que o padrão é 302.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top