Как я могу перенаправить свои веб-страницы, используя .htaccess, чтобы старые ссылки перенаправлялись на новые? - PullRequest
3 голосов
/ 06 марта 2009

У меня есть ссылки, которые имеют старый формат

 www.mydomain.com/dir/this_my_page.html 

и мой новый скрипт должен быть перенаправлен на

 www.mydomain.com/newdir/this+my+page.htm 

Что я собираюсь редактировать в моем файле .htaccess, чтобы это стало возможным? Кто-нибудь может мне помочь с функцией mod_rewrite htaccess?

Ответы [ 2 ]

2 голосов
/ 06 марта 2009

Я предлагаю использовать Фронт-контроллер. Это означает, что вы используете файл htaccess для перезаписи ВСЕХ запросов в один файл (index.php), а затем используете код в этом файле для отправки на соответствующую страницу. Вы можете выполнить перенаправление со старых URL-адресов на новые URL-адреса, и если это новый URL-адрес, вы отправляете его на соответствующий контроллер страницы.

Это было бы намного проще, чем писать огромные правила перезаписи для каждого типа страниц, которые у вас могут быть. Таким образом, вся работа выполняется на том же языке, на котором уже работает ваш сайт, так что вам не нужно изучать и поддерживать ужасный огромный файл .htaccess, который в любом случае будет кошмаром!

Вот пример файла .htaccess, который перенаправляет все нестатические запросы в index.php:

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

Затем в index.php вам нужно выполнить всю логику интерпретации запроса и выяснения, что с ним делать. Лично мне нравится использовать Zend Framework MVC: http://framework.zend.com/manual/en/zend.controller.html

Но это может быть много работы для преобразования, если у вас уже есть это в другом формате.

1 голос
/ 06 марта 2009

Если вы просто меняете части URL, например, каталоги, вы можете использовать

RedirectMatch ^/oldPath/(.*) http://www.example.com/newPath/$1

(может работать с относительными URL, не проверено ...)

Если имена документов также меняются, вы должны либо найти алгоритм для перевода, либо разместить одно перенаправление для каждого URL, который вы хотите перенаправить. В зависимости от количества документов вы можете сделать немагическое и совершенно не крутое

RedirectMatch ^/dir/first_document.html /newdir/first+document.html
RedirectMatch ^/dir/second_document.html /newdir/second+document.html
RedirectMatch ^/dir/third_document.html /newdir/third+document.html

Некоторые мастера регулярных выражений, вероятно, могут добавить регулярные выражения для всех чисел подчеркивания, которые нужно перевести в плюсы, но I оставлю это открытым;)

Если это слишком много, вам на самом деле не нужно переписывать, вы также можете выбрать документ с ошибкой 404, например,

ErrorDocument 404 /redirect.php (or .jsp, .asp, .whatever)

Затем используйте этот скрипт для поиска исходного URL-адреса запроса и используйте ваш любимый язык сценариев / программирования для перевода старых URL-адресов в новые URL-адреса (изучите заголовки запроса, чтобы выяснить, как называется исходный URL-адрес. В PHP место в документе об ошибке (не забудьте удалить его в рабочей версии) и найти в запросе исходный заголовок URL-адреса. Затем отправьте ответ 301 Moved Permanently с новым URL-адресом.

...