Я боюсь, что это может быть слишком много, чтобы спросить здесь, поэтому, если это так, пожалуйста, не стесняйтесь сообщить мне о другом месте, где можно учиться.
Помогите с переадресацией
Я очищаю плохо развитый сайт и переношу wordpress из подкаталога. Я часами пытался разобраться в логистике перенаправлений и регулярных выражений. Я думаю, что справлюсь с этим, но был бы очень признателен за подтверждение того, что я делаю это правильно, и за любые советы по передовому опыту. Если кто-нибудь знает какие-либо хорошие учебники с практическими примерами, я тоже был бы признателен.
Если кто-нибудь знает действительно простые плагины для этого, я был бы очень благодарен. Я смотрел на плагин Redirections, но нашел его очень запутанным (головная боль!). В любом случае, мои идеи ниже (за источниками следует => затем цель) — это то, что я собрал из инструкций по перенаправлениям, скриншотов и других руководств, которые я просмотрел. Я почти уверен, что они будут применимы независимо от того, помещу ли я их непосредственно в файл.htaccess или использую перенаправления или другой плагин?
Итак, вот что я пытаюсь сделать и как я думаю, что это нужно сделать:
-
Чтобы переместить WordPress из подкаталога в корень:
/wp/(.*) => /$1
-
Для всех страниц, которые в настоящее время находятся в подкаталогах в корне, я хочу удалить и/или объединить кучу страниц в одну страницу верхнего уровня:
/products-directory/(.*) => /products-top-level-page /about-directory/(.*) => /about-top-level-page /services-directory/(.*) => /services-top-level-page
-
Для группы страниц верхнего уровня, соответствующих определенному шаблону, я хочу направить их в определенные категории, например, все имена файлов начинаются с одних и тех же двух слов, например: тот же-слово-вариация-вариация.html, и я хочу, чтобы они сохранить их существующие имена файлов — если я установлю, что мои постоянные ссылки заканчиваются на `.html`, это сработает, я думаю:
/то же слово(.*) => /новая категория/$1
Как мне создать правило, если у меня нет постоянных ссылок, оканчивающихся на `.html`? (Кажется, я видел! — это символ «не», но не знаю, как здесь его использовать — не так ли):
/то же-слово(.*) => /newcategory/$1!\.html
-
И затем, как только я идентифицирую и перенаправлю определенные страницы, как указано выше, я удалю все остальное (мусор) и захочу отправить пользователей на домашнюю страницу (или, может быть, случайный пост?).
Итак, 2 вопроса здесь:
-
Как мне создать правило, которое говорит: «для всего, кроме файлов, уже перенаправленных, как указано выше, сделайте это»
-
Как мне предотвратить применение этого правила к новым страницам и сообщениям, которые я создаю с этого момента?
Одна из идей заключается в том, что при удалении я получу ненайденную страницу 404, поэтому я должен создать правило для самой страницы 404? Это то, что я хочу сделать?
Как я уже сказал, сайт был плохо разработан (клиент инструктировал людей просто «подбросить страницу», не обращая внимания на правильную архитектуру, SEO и т. д.) — у него практически нет рейтинга или внешних / обратных ссылок. беспокоиться, но я хочу понять лучший подход с точки зрения SEO и правильной разработки.
-
- Кроме того, следует ли переместить существующие изображения и т. д. в каталог wp-content или оставить их в существующих подкаталогах? Я склоняюсь к тому, чтобы действительно провести «чистую уборку» — избавиться от всего, что кажется неопрятным, но я не уверен, что это будет больше работы, чем оно того стоит…
Заранее спасибо за любое руководство.
Привет @CJN:,
Ваш первый вопрос, перемещение каталога WordPress обрабатывается иначе, чем остальные.
Перемещение WordPress из подкаталога в корень:
Зайдите
/wp-config.php
и добавьте следующее в определения (используя домен вашего клиента, а неexample.com
, конечно):301 Редирект с использованием
template_loader
иwp_safe_redirect()
Вы можете решить большинство остальных ваших вопросов, изменив
.htaccess
, как показывает @Kau-Boy, или вы можете просто сделать это на PHP. В WordPress естьtemplate_redirect
хук, который вы можете использовать для этого, а такжеwp_safe_redirect()
функция перенаправления с301
кодом состояния HTTP. Как видите, все остальное — это перебор PHP-кода с добавлением небольшого количества магии регулярных выражений. Вы можете поместить этот код практически в любое местоfunctions.php
файла вашей темы:Учитывать юзабилити, а не только SEO?
Я хотел бы спросить, действительно ли вы хотите сделать № 2? ИМО, что делает сайт гораздо менее удобным для пользователей, чем тот, который оптимизирован исключительно для воспринимаемой SEO (и как основатель и одно время соорганизатор этой группы я не новичок в SEO). Я бы предпочел, чтобы вы просто удалить
"-directory"
из первого сегмента URL-адреса. JMTCW в любом случае.Генерация 404 страниц?
Если вам нужно выдать 404, вы можете сделать это с помощью заголовка:
Однако я думаю, что это не то, что вы хотите сделать, верно? Я думаю, вы можете достичь любой логики перенаправления, которая вам нужна, изменив функцию PHP выше и отвечая на HTTP-запрос с помощью
301
, верно?Импорт изображений в медиатеку и перенаправление 301
Вы можете переместить их в медиатеку, и это позволит вам управлять ими в будущем. Вот плагин, который может помочь (хотя я не уверен, работает ли он с 3.0; если нет, то в любом случае это может быть хорошей кодовой базой для работы):
Жесткое кодирование URL-адреса изображения 301 перенаправляет с использованием массива
Затем, поскольку это будет одноразовая вещь, вы можете просто жестко закодировать URL-адреса ваших изображений в массив и использовать их для сопоставления в вашей функции перенаправления. Изменение значения по умолчанию в операторе switch из приведенного выше кода может выглядеть так:
Использование
preg_match()
301 перенаправления изображений по шаблону URLКонечно, если ваши URL-адреса изображений следуют шаблону, вы можете упростить большую часть или весь массив изображений, используя
preg_match()
вместо этого, например:Надеюсь это поможет?
Привет, Майк! Как всегда, ты великолепен — всегда готов помочь и помочь! Но — это выглядит очень пугающе, и я боюсь, что мне не по силам возиться с файлами php и core… В первой части вашего ответа вы говорите, что я могу сделать это с помощью.htaccess as @ Kau-Boy показывает, так что ваш ответ является альтернативой этому, верно? В пункте № 2 каталоги — это просто «/products/» и т. д., без «-directory» — есть огромное количество бесполезных каталогов с огромным количеством бесполезных файлов внутри, я хотел безболезненный способ избавиться от них. «все, кроме» страницы верхнего уровня в небольшом количестве каталогов.
И, по поводу: «Генерация 404» — я хочу избежать генерации 404, не так ли? Я пытаюсь «поймать» все с помощью 301-х. Эта идея заключалась в том, что это может быть простой способ перенаправить «все, кроме» нескольких страниц, которые я указал в других моих правилах 301, поэтому удалите все, кроме этих нескольких страниц; вместо того, чтобы пользователь получал 404, он перенаправлялся на домашнюю/случайную страницу, которую я установил? Но это мудрый способ справиться с этим? Как оказалось, многие бесполезные каталоги также имеют свои собственные папки с изображениями, так что с этим больше проблем… В любом случае, я очень ценю всю вашу помощь (здесь и на других форумах, где я вас вижу).
@CJN: Да, это альтернатива использованию
.htaccess
последнего, чего я не желаю даже своим злейшим врагам. 🙂 Серьезно, на PHP гораздо проще написать что-то надежное, чем на.htaccess
. Ваш вопрос включал «-directory
поэтому я использовал в своем ответе. Я сделал много этого, и это, вероятно, один из самых безболезненных способов, которые вы можете пройти. Найдите шаблоны и закодируйте их вif
операторы,switch
операторы и сопоставление регулярных выражений и массивов. Просто выберите пример, это действительно очень просто. Задайте любые дополнительные вопросы, которые вам нужны.@CJN: Ваш вопрос был сформулирован так, что я подумал, может быть, вы хотели их, но да, избегайте ошибок 404. Поймите, что URL-адреса представляют собой дерево сегментов пути, разделенных косой чертой, и просто напишите логику для обработки этого; просто разделяй и властвуй. И спроси, если споткнешься. Хотя это может показаться сложным, на самом деле это не сравнить со многими другими вещами, это просто грубая проверка и картирование.
мальчик, большое спасибо. Похоже, у меня были правильные идеи, но трудно сказать, потому что вы говорите «(не уверен, что все они верны)». Я не думаю, что мне нужно будет беспокоиться о доступе к базе данных для работы с постоянными ссылками. У меня есть wordpress, настроенный соответствующим образом, и я хорошо справляюсь с этим. Еще раз спасибо за участие — теперь я чувствую себя более уверенно в будущем.
Есть плагин для перехода с одной структуры постоянных ссылок на другую, но я совершенно уверен, что этого будет недостаточно для ваших нужд. Вам придется использовать некоторые правила перезаписи.htaccess. Я пытаюсь дать вам несколько примеров для ваших нужд (не уверен, что все они верны). Включите все эти строки в файл с именем «.htaccess» в корне вашего сервера. Из вышеприведенных правил WordPress:
Флаг [R=301] сообщит клиентскому браузеру или поисковой системе, что это постоянный редирект.
Вероятно, вы захотите обновить все постоянные ссылки в базе данных WordPress. Я написал статью об обновлении строки в базе данных. К сожалению, я еще не перевел пост. Но запросы должны быть четкими, в противном случае просто используйте документы MySQL.
Я использую это: Плагин Simple 301 Redirects — использовал его для нескольких страниц ранее, и вскоре я перенесу свой сайт веб-дизайна со всеми его файлами и папками внутри моих файлов WP.