Каков наилучший способ выполнить перенаправление 301 в этой ситуации?
-
06-09-2019 - |
Вопрос
У меня есть веб-сайт PHP5 / Zend Framework 1.8.1, который расположен по адресу:
http://www.example.com/foo
Более старая версия этого сайта, которая, к сожалению, все еще поддерживается индексом Google, была расположена по адресу:
http://www.example.com/foo/DEFAULT.ASP
Таким образом, многие люди запрашивают приведенную выше ссылку и заходят в тупик.
Я полагаю, что способ исправить это - выдать 301 редирект, чтобы перевести его на новый сайт.На ум приходят два способа сделать это::
Первый способ , о котором я подумал , это добавить правило перезаписи в наш файл .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, но они не работают.
Второй способ, о котором я подумал, - это использовать
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
Кто-нибудь может дать какие-либо советы о том, как справиться с этой ситуацией?Я хотел бы знать все или что-либо из:
- Как заставить правило перезаписи работать
- Как сделать '301' с помощью
Zend_Controller_Router_Route
если возможно. - Есть ли другой способ, которого мне не хватает?
- Какой способ лучше и почему?
- Почему 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.