Я боюсь, что это может быть слишком много, чтобы спросить здесь, поэтому, если это так, пожалуйста, не стесняйтесь рассказать мне о другом месте, чтобы узнать.
Я убираю плохо разработанный сайт и переношу WordPress из подкаталога. Я часами пытался обернуть голову вокруг логистики перенаправлений и регулярных выражений. Я думаю, что справляюсь с этим, но был бы очень признателен за подтверждение того, что я делаю это правильно, и за любые советы по передовому опыту. Если кто-нибудь знает какие-либо хорошие учебники с практическими примерами, я бы тоже это оценил.
Если кто-то знает о действительно простых плагинах для этого, я был бы чрезвычайно благодарен. Я смотрю на плагин Redirections, но нахожу его очень запутанным (головная боль!). В любом случае, мои идеи ниже (источники следуют => затем цель) - это то, что я собрал из инструкций по перенаправлениям и скриншотов и других обучающих программ, которые я изучил. Я почти уверен, что они будут применимы независимо от того, поместил ли я их непосредственно в файл .htaccess или использовал перенаправления или другой плагин?
Итак, вот что я пытаюсь сделать и как я думаю, что это нужно сделать:
Чтобы переместить Wordpress из подкаталога в корень:
/wp /(.*) => /$1
Для всех страниц, которые в настоящее время находятся в подкаталогах в корневом каталоге, я хочу удалить и/или объединить несколько страниц в одну страницу верхнего уровня:
/products-directory /(.*) =>/products-top-level-page /about-directory /(.*) =>/about-top- level-page /services-directory /(.*) =>/services-top-level-page
Для группы страниц верхнего уровня, соответствующих определенному шаблону, я хочу направить их в определенные категории, например, имена файлов начинаются с одних и тех же двух слов, таких как: same-Word-Вариант-Вариация.html, и я хочу, чтобы они сохранили свои существующие имена файлов - если я установлю мои постоянные ссылки заканчиваться на `.html`, это будет работать , Я верю:
/same-Word (. *) => /newcategory/$1
Как мне создать правило, если у меня нет постоянных ссылок, заканчивающихся на `.html`? (Я думаю, что я видел! Это "не" символ, но не уверен, как использовать здесь - это так):
/same-Word (. *) => /newcategory/$1!\.html
И затем, как только я определю и перенаправлю конкретные страницы, как указано выше, я буду удалять все остальное (мусор) и хочу отправлять пользователей на домашнюю страницу (или, может быть, случайный пост?).
Итак, 2 вопроса здесь:
Как создать правило, которое гласит: "Для всего, кроме файлов, уже перенаправленных, как указано выше, сделайте это"
Как бы я прекратил применять это правило к новым страницам и постам, которые я создаю с этого момента?
Одна идея состоит в том, что при удалении я получу страницу 404 не найденной, поэтому я должен создать правило для самой страницы 404? Это то, что я хочу сделать?
Как я уже сказал, сайт был плохо разработан (когда клиент велел людям просто "выбросить страницу", не обращая внимания на правильную архитектуру, SEO и т.д.) - на нем практически нет рейтинга или внешних/обратных ссылок. беспокоиться, но я хочу понять лучший подход с точки зрения SEO и правильной точки зрения развития.
Заранее спасибо за любое руководство.
Привет @CJN: ,
Ваш первый вопрос, перемещение каталога WordPress обрабатывается иначе, чем остальные.
Зайдите в /wp-config.php
и добавьте следующее в определения (используя домен вашего клиента вместо example.com
конечно):
define('WP_SITEURL', 'http://example.com');
define('WP_HOME', WP_SITEURL);
template_loader
и wp_safe_redirect()
Вы можете решить большинство оставшихся вопросов, изменив .htaccess
, поскольку @ Kau-Boy показывает, как, или вы можете просто сделать это в PHP . WordPress имеет ловушку template_redirect
, которую вы можете использовать для этого вместе с функцией wp_safe_redirect()
для перенаправления с кодом состояния 301
HTTP. Как видите, все остальное - просто грубый код PHP и немного магии регулярных выражений. Вы можете поместить этот код практически где угодно в файле functions.php
своей темы:
add_action('template_redirect','my_template_redirect');
function my_template_redirect() {
$redirect_to = false;
list($url_path,$params) = explode('?',$_SERVER['REQUEST_URI']);
$path_parts = explode('/',trim($url_path,'/'));
switch ($path_parts[0]) {
case 'products-directory':
$redirect_to = '/products-top-level-page';
break;
case 'about-directory':
$redirect_to = '/about-top-level-page';
break;
case 'services-directory':
$redirect_to = '/services-top-level-page';
break;
default:
if (preg_match('#same-Word(.*)#',$path_parts[0],$match)) {
$category = str_replace('.html','',$match[1]);
$redirect_to = "/newcategory/{$category}";
} else {
// Do whatever else you need here
}
}
if ($redirect_to) {
wp_safe_redirect($redirect_to,301);
exit();
}
}
Я хотел бы спросить, действительно ли вы хотите сделать № 2? ИМО, который делает сайт гораздо менее пригодным для пользователей, чем тот, который оптимизирован исключительно для воспринимаемого SEO (и как основатель и один раз соорганизатор этой группы я не новичок SEO.) Я бы много скорее, вы просто удаляете "-directory"
из первого сегмента пути URL. В любом случае, JMTCW.
Если вам нужно выдать 404, вы можете сделать это с заголовком:
header("HTTP/1.0 404 Not Found");
exit;
Однако я думаю, что это не то, что вы хотите сделать, правильно? Я думаю, что вы можете добиться любой необходимой вам логики перенаправления, изменив функцию PHP выше и ответив на HTTP-запрос с помощью 301
, верно?
Вы можете переместить их в медиа-библиотеку, и это позволит вам управлять ими в будущем. Вот плагин, который может помочь (хотя я не уверен, что он работает с 3.0; в противном случае это может быть хорошая база кода для работы в любом случае):
Тогда, поскольку это будет одноразовая вещь , вы можете просто жестко закодировать URL-адреса вашего изображения в массив и использовать их для сопоставления в вашей функции перенаправления. Изменение значения по умолчанию в операторе switch из приведенного выше кода может выглядеть следующим образом:
default:
if (preg_match('#same-Word(.*)#',$path_parts[0],$match)) {
$category = str_replace('.html','',$match[1]);
$redirect_to = "/newcategory/{$category}";
} else {
$images = array(
'/images/image1.jpg' => '/wp-content/uploads/2010/08/image1.jpg',
'/images/image2.jpg' => '/wp-content/uploads/2010/08/image2.jpg',
'/images/image3.jpg' => '/wp-content/uploads/2010/08/image3.jpg',
);
if (in_array($url_path,$images)) {
$redirect_to = $images[$url_path];
} else {
// Do whatever else you need here
}
}
preg_match()
для 301 перенаправления изображений по шаблону URLКонечно, если URL-адреса ваших изображений следуют шаблону, вы можете упростить большую часть или весь массив изображений, используя вместо этого функцию preg_match()
, например, так:
if (preg_match('#^/images/(.*)$#',$url_path,$match)) {
$redirect_to = "/wp-content/uploads/2010/08/{$match[1]}";
}
Надеюсь это поможет?
Существует плагин для перехода от одной постоянной ссылки к другой, но я совершенно уверен, что этого будет недостаточно для ваших нужд. Вам придется использовать некоторые правила переписывания .htaccess. Я пытаюсь дать вам несколько примеров для ваших нужд (не уверен, что все они верны). Включите все эти строки в файл с именем ".htaccess" в корне вашего сервера. Из вышеперечисленных правил WordPress:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
# your rules start here. Keep the following lines that has been produced by wordpress
RewriteBase /
RewriteRule wp/(.*)$ /$1 [R=301]
RewriteRule /products-directory/(.*)$ /products-top-level-page [R=301]
RewriteRule /about-directory/(.*)$ /about-top-level-page [R=301]
RewriteRule /services-directory/$ /services-top-level-page [R=301]
RewriteRule /same-Word(.*)$ /newcategory/$1 [R=301]
Флаг [R = 301] сообщит клиентскому браузеру или поисковику, что это постоянное перенаправление.
Возможно, вы захотите обновить все постоянные ссылки в вашей базе данных WordPress. Я написал статью об обновлении строки в базе данных . К сожалению, я еще не перевела пост. Но запросы должны быть понятными, в противном случае просто используйте документы MySQL.
Я использую это: Simple 301 Redirects plugin - использовал его несколько предыдущих страниц, и я скоро перенесу свой сайт веб-дизайна со всеми его файлами и папками в мои WP файлы.