Каков наилучший способ выполнить перенаправление 301 в этой ситуации?

StackOverflow https://stackoverflow.com/questions/914667

Вопрос

У меня есть веб-сайт 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
    

    Как новичок в 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 не разбирается в этом?Прошло почти полгода.
Это было полезно?

Решение

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

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

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

Другие советы

Недавно я решил аналогичную проблему, добавив

AddType application/x-httpd-php .asp

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

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

Redirect permanent /foo/DEFAULT.ASP /foo

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

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

Он предлагает "Redirector Zend Controller Action Helper" для перенаправления внутренних URL-адресов.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top