Задача довольно простая, но для знающих людей, попробуем разобраться и мы. Нужно сделать 301 редирект для сайта на WordPress таким образом, чтобы записи из корня первого сайта (который мы редиректим) смотрели на такие же записи в категории второго сайта на другом домене.

Если не поняли о чем я, вот примерно как это выглядит схематически:

http://site1.com/1post.html -301 редирект-> http://site2.com/category/1post.html

Подготовка сайта к редиректу

Сперва Вам необходимо выполнить Экспорт записей, которые должны открываться на новом сайте. Для этого у WordPress есть замечательные инструменты Экспорта и Импорта в админ-панели в одноименном пункте меню.

Использовать их очень просто, поэтому лишь покажу на скриншоте, где они находятся:

Кстати при импорте обратите внимание на две вещи:

  1. Сколько все же различных CMS можно импортировать в WordPress.
  2. При импорте на новом сайте появятся новые категории, если их не было. Записи в то же время  будут сохраняться либо в новые, либо в одноименные категории нового сайта. То есть, если на старом сайте была категория «Картинки», то в новом она создастся автоматически.  Из этого следует, что записи придется пересохранить в ту категории, в которую мы хотим сделать редирект.

Пишем 301 редирект на PHP

Для корректного редиректа на PHP нам понадобится стандартный «.htaccess» для WordPress. Если его нет, то создайте в корне сайта такой файл со следующим содержимым:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

Этот файл указывает на то, что все запросы к сайту обрабатывает файл  «index.php».

Ну и наконец, в файле index.php пишем сам код 301 редиректа:

Error_Reporting(E_ALL & ~E_NOTICE);
$Rq=$_SERVER["REQUEST_URI"];
if (!(eregi("^[0-9_./]*$", $t) && !eregi("\.\.", $Rq)))
{
die("Invalid Request");
}
elseif($Rq==''){
header('HTTP/1.1 301 Moved Permanently');
header("Location: http://site2.com/");
}
else{
header('HTTP/1.1 301 Moved Permanently');
header("Location: http://site2.com/press".$Rq);
exit();}

Немного расскажу про код. У нас есть условие, в котором мы проверяем запрос на запрещенные символы и код. Если всё с запросом в порядке, но он пустой :$Rq==» (это две одинарные кавычки), то редиректим в корень сайта 2, то есть на главную. (условие elseif)

Если запрос не пустой и не содержит запрещенных символов, то выполняем его редирект в категорию или папку PRESS сайта 2. (условие else)

Этот способ хорош для сайтов на WordPress, где постоянные ссылки не содержат названия категории или тегов, имею ввиду что Permalinks задан как %postname% или %postname%.html. Кроме того на новом сайте номер 2 должна быть такая же структура ссылок.

После всех приготовлений не забудьте поставить права 555 на htaccess и index.php.

Сейчас другие читают: