Вопрос или проблема
Я хочу переписать 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:
- Год (
2021
), который является частью фиксированного пути, но также переменной. - Значение параметра 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]
Объяснение
- RewriteEngine On: Включает механизм переписывания URL в Apache.
- RewriteCond: Задает условие, при котором правило будет срабатывать. Здесь мы используем условие на основе строки запроса (
QUERY_STRING
). Регулярное выражение^id=\d+_(.+)$
выделяет имяbetty-white
, используя обратную ссылку%1
. - 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.