Каков наилучший способ сделать редирект 301 в этой ситуации? - PullRequest
1 голос
/ 27 мая 2009

У меня есть веб-сайт PHP5 / Zend Framework 1.8.1, который расположен по адресу:

http://www.example.com/foo

Старая версия этого сайта, которая, к сожалению, все еще поддерживается индексом Google, была расположена по адресу:

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

Так что многие люди запрашивают вышеуказанную ссылку и заходят в тупик.

Я полагаю, что исправить это можно было бы путем перенаправления 301, чтобы перевести его на новый сайт. На ум приходят два способа сделать это:

  1. Первый способ, о котором я подумал, - это добавить правило перезаписи в наш .htaccess. Наша реализация сайта - PHP5 / Zend Framework 1.8.1, поэтому в .htaccess существует существующее правило перезаписи (согласно требованию Zend Framework MVC), которое:

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

    Как noob mod_rewrite, я немного погуглил и придумал следующее для обработки перенаправления:

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

    Я добавил эти строки в .htaccess, но они не работают.

  2. Второй способ, о котором я подумал, - это использовать Zend_Router_Route_Static следующим образом:

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

    Это перенаправляет на правильную страницу, но я понятия не имею, как установить заголовок 301, плюс это довольно нелегко, когда эти строки кода в моем bootstrap.php

Может кто-нибудь дать совет, как справиться с этой ситуацией? Я хотел бы знать все или любой из:

  1. Как заставить работать правило перезаписи
  2. Как сделать «301» с Zend_Controller_Router_Route если возможно.
  3. Есть ли другой способ, которым я отсутствует
  4. Какой путь лучше и почему?
  5. Почему бы Google не понять это? Прошло почти полгода.

Ответы [ 4 ]

2 голосов
/ 05 июня 2009

Я недавно решил похожую проблему, добавив

AddType application/x-httpd-php .asp

в файл .htaccess, который заставляет сервер запускать файлы .asp с php.

Затем я создал файл default.asp, содержащий заголовок ('Location: /' и т. Д.), Чтобы заменить тот, который искал Google. У меня было несколько других файлов .asp со сложными параметрами, которые нужно было преобразовать в новые URL-адреса перед перенаправлением, в некоторых случаях требовался поиск в базе данных, поэтому было удобно иметь возможность писать все на PHP, чтобы я мог использовать файлы включения из других частей проекта.

2 голосов
/ 27 мая 2009

Это должно сработать (убедитесь, что вы поставили его перед правилом Zend):

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

Я не уверен, почему Google не выясняет это - вы уверены, что даете правильный код статуса 404? Вы можете проверить, посмотрев на заголовки - в Firefox я использую Live HTTP Headers .

1 голос
/ 09 июня 2009

Похоже, что вы решили свою проблему, и это не было бы хорошим решением для вашей проблемы, но вот еще один ресурс, который другие могут найти полезным, если они были привлечены к этой теме вашим вопросом:

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

Он предлагает «Помощник по перенаправлению Zend Controller» для перенаправления внутренних URL.

P.S. Если кто-то использует _redirect, обязательно передайте код перенаправления 301 (если это то, что вам нужно), поскольку по умолчанию он равен 302.

1 голос
/ 27 мая 2009
Redirect permanent /foo/DEFAULT.ASP /foo
...