htaccess: URL переписывание с обратными ссылками в URL и параметре

Вопрос или проблема

Я хочу переписать URL (с параметрами) с моего старого домена на URL (без параметров) на мой новый домен.

-> Старый URL: old-domain.com/deceased-persons-2021/?id=1500_betty-white

-> Новый URL: new-domain.com/deceased-persons/2021/betty-white

Проблема в том, что мне нужна не только ссылка на значение параметра, но и на год ‘2021’.

Если бы URL были old-domain.com/deceased-persons-2021/ ИЛИ old-domain.com/deceased-persons/?id=1500_betty-white, я бы знал решения. Но я не знаю, как управлять обратной ссылкой в URL в сочетании с обратной ссылкой в параметре.

Большое спасибо заранее за вашу помощь! Андреас

Ответ или решение

Перенаправление URL с помощью файла .htaccess может быть сложной задачей, особенно когда требуется использовать обратные ссылки как в адресной строке, так и в параметрах. В данном случае задача заключается в том, чтобы перенаправить URL старого домена, содержащий параметры, на новый домен, где параметры интегрированы в структуру URL. Рассмотрим, как это можно осуществить с помощью модуля mod_rewrite в Apache.

Теория

Модуль mod_rewrite в Apache значительно расширяет возможности управления URL. Этот модуль поддерживает регулярные выражения, которые позволяют использовать обратные ссылки. Обратные ссылки — это ссылки на группы, захваченные в регулярных выражениях. Например, в регулярном выражении ^foo(\d+)bar$, если строка foo123bar соответствует, то обратная ссылка \1 будет равна 123.

Особенность задачи, которую мы решаем здесь, заключается в обработке URL, который содержит как фиксированную часть, так и часть в виде параметра. Для успешной реализации перенаправления, необходимо использовать регулярные выражения для извлечения необходимых частей URL и параметров, а затем использовать их в новом формате URL.

Пример

Рассмотрим пример, где имеется URL старого формата:

old-domain.com/deceased-persons-2021/?id=1500_betty-white

И новый формат, к которому необходимо перенаправить:

new-domain.com/deceased-persons/2021/betty-white

Здесь нам необходимо вычленить две важных составные части из старого URL:

  1. Год (2021), который является частью фиксированного пути, но также переменной.
  2. Значение параметра ID (1500_betty-white), из которого нам необходимо использовать только имя (betty-white).

Применение

Для этого воспользуемся регулярными выражениями в файле .htaccess на сервере Apache:

RewriteEngine On

# Обработка URL с годом и параметром
RewriteCond %{QUERY_STRING} ^id=\d+_(.+)$
RewriteRule ^deceased-persons-(\d{4})/$ /deceased-persons/%1/%1/%2? [R=301,L,NE]

Объяснение

  1. RewriteEngine On: Включает механизм переписывания URL в Apache.
  2. RewriteCond: Задает условие, при котором правило будет срабатывать. Здесь мы используем условие на основе строки запроса (QUERY_STRING). Регулярное выражение ^id=\d+_(.+)$ выделяет имя betty-white, используя обратную ссылку %1.
  3. RewriteRule: Само правило переписывания URL. Регулярное выражение ^deceased-persons-(\d{4})/$ выделяет год 2021, используя обратную ссылку %1. Полный новый URL затем формируется путем вставки значений из обратных ссылок: /deceased-persons/%1/%2.

Заключение

Это правило перенаправляет каждый запрос такого формата на новый URL-адрес, используя редирект 301, что указывает на постоянное изменение URL. Флажок NE (No Escape) гарантирует, что специальные символы в URL не будут экранированы.

Настройка .htaccess с mod_rewrite может значительно улучшить SEO и организацию структуры URL вашего сайта. В случае сложностей с реализацией или специфическими требованиями, рекомендуется обратиться к консультанту по настройке серверов или изучить более детально документацию по mod_rewrite.

Следует помнить, что для успешного применения данных правил необходимо, чтобы сервер поддерживал модуль mod_rewrite и были достаточно прав для изменения файла .htaccess.

Оцените материал
Добавить комментарий

Капча загружается...