Недавно мы разработали систему для перенаправления старых URL-адресов в PHP, чтобы вы могли избежать ошибок «страница не найдена» (я предлагаю вам прочитать ее, прежде чем углубляться). В этой статье мы создадим аналогичную систему для WordPress, популярной PHP CMS .
Чем отличается WordPress?
WordPress направляет все запросы через один файл index.php
. В обычных условиях все URL-адреса, которые не отображаются на физический файл или папку на вашем сервере, будут обрабатываться WordPress. Это включает в себя все недействительные адреса, поэтому нет необходимости настраивать документ об ошибке 404 в Apache или IIS.
Вероятно, нет необходимости беспокоиться о перенаправлении старых URL-адресов, если вы используете WordPress с самого первого дня. Система достаточно хороша в поиске нужной страницы, даже если вы изменили структуру постоянных ссылок (Настройки> Постоянные ссылки). Однако, если вы переносите контент со статического сайта или другой CMS, вы почти наверняка будете иметь несоответствия URL.
Обновление темы
Мы собираемся обработать перенаправления в вашей теме WordPress. Вы можете создать плагин, но:
- перенаправления зависят от сайта, а общий плагин добавил бы больше сложности
- код вряд ли потребует дополнительных обновлений, и желательно, чтобы пользователи не настраивали или не отключали его, и
- встраивание его в тему делает его более переносимым — вы просто копируете файлы темы на сервер
Сначала найдите файлы вашей темы в wp-content/themes/ my-theme-name
. Многие темы предоставляют файл 404.php
для обработки ошибок «страница не найдена», но вы можете создать 404.php
при необходимости; например:
<?php get_header(); ?> <h1>Page not found</h1> <p>Sorry, we cannot find that page.</p> <p>Please browse the sitemap…</p> <ul id="sitemap"> <?php wp_list_pages('title_li='); ?> </ul> <?php get_footer(); ?>
Теперь вы должны включить redirect.php
вверху файла 404.php
, например:
<?php include('redirect.php'); ?> <?php get_header(); // etc...
(Обратите внимание, что более ранние версии WordPress могут потребовать: include(TEMPLATEPATH.'/redirect.php');
Redirect.php include(TEMPLATEPATH.'/redirect.php');
будет работать и в последних версиях.)
Теперь создайте файл redirect.php
в папке вашей темы и добавьте следующий код:
<?php // current address $oldurl = strtolower($_SERVER['REQUEST_URI']); // new redirect address $newurl = ''; // old to new URL map (for you to configure) $redir = array( 'index.html' => '/', 'article1.html' => '/blogs/my-first-article', 'article2.html' => '/blogs/my-second-article' ); while ((list($old, $new) = each($redir)) && !$newurl) { if (strpos($oldurl, $old) !== false) $newurl = $new; } // redirect if ($newurl != '') { header('HTTP/1.1 301 Moved Permanently'); header("Location: $newurl"); exit(); } ?>
При $redir
можно настроить массив сопоставления URL-адресов $redir
. В качестве альтернативы вы можете использовать серию замен регулярных выражений или поиск в таблице базы данных, чтобы найти действительный $newurl
.
Я надеюсь, что это помогает с вашими проблемами WordPress URL. Если у вас есть другие советы по управлению перенаправлениями, оставьте свои комментарии ниже.