cjn
  • 0
Новичок

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

  • 0

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

Помогите с переадресацией

Я очищаю плохо развитый сайт и переношу 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. Для группы страниц верхнего уровня, соответствующих определенному шаблону, я хочу направить их в определенные категории, например, все имена файлов начинаются с одних и тех же двух слов, например: тот же-слово-вариация-вариация.html, и я хочу, чтобы они сохранить их существующие имена файлов — если я установлю, что мои постоянные ссылки заканчиваются на `.html`, это сработает, я думаю:

    /то же слово(.*) => /новая категория/$1
    

    Как мне создать правило, если у меня нет постоянных ссылок, оканчивающихся на `.html`? (Кажется, я видел! — это символ «не», но не знаю, как здесь его использовать — не так ли):

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

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

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

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

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

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

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

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

Share
  1. Привет @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; если нет, то в любом случае это может быть хорошей кодовой базой для работы):

    Жесткое кодирование 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]}";
    }
    

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

    • 0
    • Привет, Майк! Как всегда, ты великолепен — всегда готов помочь и помочь! Но — это выглядит очень пугающе, и я боюсь, что мне не по силам возиться с файлами php и core… В первой части вашего ответа вы говорите, что я могу сделать это с помощью.htaccess as @ Kau-Boy показывает, так что ваш ответ является альтернативой этому, верно? В пункте № 2 каталоги — это просто «/products/» и т. д., без «-directory» — есть огромное количество бесполезных каталогов с огромным количеством бесполезных файлов внутри, я хотел безболезненный способ избавиться от них. «все, кроме» страницы верхнего уровня в небольшом количестве каталогов.

      • 0
    • И, по поводу: «Генерация 404» — я хочу избежать генерации 404, не так ли? Я пытаюсь «поймать» все с помощью 301-х. Эта идея заключалась в том, что это может быть простой способ перенаправить «все, кроме» нескольких страниц, которые я указал в других моих правилах 301, поэтому удалите все, кроме этих нескольких страниц; вместо того, чтобы пользователь получал 404, он перенаправлялся на домашнюю/случайную страницу, которую я установил? Но это мудрый способ справиться с этим? Как оказалось, многие бесполезные каталоги также имеют свои собственные папки с изображениями, так что с этим больше проблем… В любом случае, я очень ценю всю вашу помощь (здесь и на других форумах, где я вас вижу).

      • 0
    • @CJN: Да, это альтернатива использованию .htaccess последнего, чего я не желаю даже своим злейшим врагам. 🙂 Серьезно, на PHP гораздо проще написать что-то надежное, чем на .htaccess . Ваш вопрос включал « -directory поэтому я использовал в своем ответе. Я сделал много этого, и это, вероятно, один из самых безболезненных способов, которые вы можете пройти. Найдите шаблоны и закодируйте их в if операторы, switch операторы и сопоставление регулярных выражений и массивов. Просто выберите пример, это действительно очень просто. Задайте любые дополнительные вопросы, которые вам нужны.

      • 0
    • @CJN: Ваш вопрос был сформулирован так, что я подумал, может быть, вы хотели их, но да, избегайте ошибок 404. Поймите, что URL-адреса представляют собой дерево сегментов пути, разделенных косой чертой, и просто напишите логику для обработки этого; просто разделяй и властвуй. И спроси, если споткнешься. Хотя это может показаться сложным, на самом деле это не сравнить со многими другими вещами, это просто грубая проверка и картирование.

      • 0
    • мальчик, большое спасибо. Похоже, у меня были правильные идеи, но трудно сказать, потому что вы говорите «(не уверен, что все они верны)». Я не думаю, что мне нужно будет беспокоиться о доступе к базе данных для работы с постоянными ссылками. У меня есть wordpress, настроенный соответствующим образом, и я хорошо справляюсь с этим. Еще раз спасибо за участие — теперь я чувствую себя более уверенно в будущем.

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

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

    • 0

Оставить ответ

You must login to add an answer.