it-swarm-ru.tech

Создание 301 переадресации для URL-адресов записей, страниц, категорий и изображений

Я боюсь, что это может быть слишком много, чтобы спросить здесь, поэтому, если это так, пожалуйста, не стесняйтесь рассказать мне о другом месте, чтобы узнать.

Помощь с перенаправлениями

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

Если кто-то знает о действительно простых плагинах для этого, я был бы чрезвычайно благодарен. Я смотрю на плагин Redirections, но нахожу его очень запутанным (головная боль!). В любом случае, мои идеи ниже (источники следуют => затем цель) - это то, что я собрал из инструкций по перенаправлениям и скриншотов и других обучающих программ, которые я изучил. Я почти уверен, что они будут применимы независимо от того, поместил ли я их непосредственно в файл .htaccess или использовал перенаправления или другой плагин?

Итак, вот что я пытаюсь сделать и как я думаю, что это нужно сделать:

  1. Чтобы переместить Wordpress из подкаталога в корень:

    /wp /(.*) => /$1
    
  2. Для всех страниц, которые в настоящее время находятся в подкаталогах в корневом каталоге, я хочу удалить и/или объединить несколько страниц в одну страницу верхнего уровня:

    /products-directory /(.*) =>/products-top-level-page 
     
    /about-directory /(.*) =>/about-top- level-page 
     
    /services-directory /(.*) =>/services-top-level-page 
    
  3. Для группы страниц верхнего уровня, соответствующих определенному шаблону, я хочу направить их в определенные категории, например, имена файлов начинаются с одних и тех же двух слов, таких как: same-Word-Вариант-Вариация.html, и я хочу, чтобы они сохранили свои существующие имена файлов - если я установлю мои постоянные ссылки заканчиваться на `.html`, это будет работать , Я верю:

    /same-Word (. *) => /newcategory/$1
    

    Как мне создать правило, если у меня нет постоянных ссылок, заканчивающихся на `.html`? (Я думаю, что я видел! Это "не" символ, но не уверен, как использовать здесь - это так):

    /same-Word (. *) => /newcategory/$1!\.html
    
  4. И затем, как только я определю и перенаправлю конкретные страницы, как указано выше, я буду удалять все остальное (мусор) и хочу отправлять пользователей на домашнюю страницу (или, может быть, случайный пост?).

    Итак, 2 вопроса здесь:

    1. Как создать правило, которое гласит: "Для всего, кроме файлов, уже перенаправленных, как указано выше, сделайте это"

    2. Как бы я прекратил применять это правило к новым страницам и постам, которые я создаю с этого момента?

    Одна идея состоит в том, что при удалении я получу страницу 404 не найденной, поэтому я должен создать правило для самой страницы 404? Это то, что я хочу сделать?

    Как я уже сказал, сайт был плохо разработан (когда клиент велел людям просто "выбросить страницу", не обращая внимания на правильную архитектуру, SEO и т.д.) - на нем практически нет рейтинга или внешних/обратных ссылок. беспокоиться, но я хочу понять лучший подход с точки зрения SEO и правильной точки зрения развития.

  5. Кроме того, я должен переместить существующие изображения и т.д. В каталог wp-content или оставить их в существующем подкаталоге? Я склоняюсь к тому, чтобы действительно пойти на "чистку" - избавиться от всего, что кажется неопрятным, но я не уверен, что это будет больше работы, чем стоит…

Заранее спасибо за любое руководство.

5
CJN

Привет @CJN: ,

Ваш первый вопрос, перемещение каталога WordPress обрабатывается иначе, чем остальные.

Перемещение WordPress из подкаталога в корневой каталог:

Зайдите в /wp-config.php и добавьте следующее в определения (используя домен вашего клиента вместо example.com конечно):

define('WP_SITEURL', 'http://example.com');
define('WP_HOME',    WP_SITEURL);

301 Перенаправляет с использованием 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();
  }
}

Подумайте об удобстве использования, а не только о SEO?

Я хотел бы спросить, действительно ли вы хотите сделать № 2? ИМО, который делает сайт гораздо менее пригодным для пользователей, чем тот, который оптимизирован исключительно для воспринимаемого SEO (и как основатель и один раз соорганизатор этой группы я не новичок SEO.) Я бы много скорее, вы просто удаляете "-directory" из первого сегмента пути URL. В любом случае, JMTCW.

Создание 404 страниц?

Если вам нужно выдать 404, вы можете сделать это с заголовком:

header("HTTP/1.0 404 Not Found");
exit;

Однако я думаю, что это не то, что вы хотите сделать, правильно? Я думаю, что вы можете добиться любой необходимой вам логики перенаправления, изменив функцию PHP выше и ответив на HTTP-запрос с помощью 301, верно?

Импорт изображений в библиотеку мультимедиа и перенаправление 301

Вы можете переместить их в медиа-библиотеку, и это позволит вам управлять ими в будущем. Вот плагин, который может помочь (хотя я не уверен, что он работает с 3.0; в противном случае это может быть хорошая база кода для работы в любом случае):

Hardcoding Image URL 301 Перенаправляет с использованием массива

Тогда, поскольку это будет одноразовая вещь , вы можете просто жестко закодировать 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]}";
}

Надеюсь это поможет?

8
MikeSchinkel

Существует плагин для перехода от одной постоянной ссылки к другой, но я совершенно уверен, что этого будет недостаточно для ваших нужд. Вам придется использовать некоторые правила переписывания .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.

1
2ndkauboy

Я использую это: Simple 301 Redirects plugin - использовал его несколько предыдущих страниц, и я скоро перенесу свой сайт веб-дизайна со всеми его файлами и папками в мои WP файлы.

0
Steve Shearer