Задача довольно простая, но для знающих людей, попробуем разобраться и мы. Нужно сделать 301 редирект для сайта на WordPress таким образом, чтобы записи из корня первого сайта (который мы редиректим) смотрели на такие же записи в категории второго сайта на другом домене.
Если не поняли о чем я, вот примерно как это выглядит схематически:
http://site1.com/1post.html -301 редирект-> http://site2.com/category/1post.html
Подготовка сайта к редиректу
Сперва Вам необходимо выполнить Экспорт записей, которые должны открываться на новом сайте. Для этого у WordPress есть замечательные инструменты Экспорта и Импорта в админ-панели в одноименном пункте меню.
Использовать их очень просто, поэтому лишь покажу на скриншоте, где они находятся:
Кстати при импорте обратите внимание на две вещи:
- Сколько все же различных CMS можно импортировать в WordPress.
- При импорте на новом сайте появятся новые категории, если их не было. Записи в то же время будут сохраняться либо в новые, либо в одноименные категории нового сайта. То есть, если на старом сайте была категория «Картинки», то в новом она создастся автоматически. Из этого следует, что записи придется пересохранить в ту категории, в которую мы хотим сделать редирект.
Пишем 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.
2 комментария
Денис says:
Окт 1, 2014
Здравствуйте, Вы меня выручили, перерыл уйму редиректов, ничего не подходит, тут же сразу заработало. Еще и еще раз утверждаюсь, тот кто ищет тот всегда найдет. А Вам огромное спс. за дельную тему. Песпект
Voff says:
Окт 2, 2014
Сам так искал в итоге написал пост