Итак, вот чего я пытаюсь достичь. У меня есть эта ссылка, я хочу перенаправить 301:
Исходный URL:
https://www.example.com/folder1/page.aspx?fh_location=%2f%2fpackages%2fnl_BE%2fpr_earlybookable%3E%7b0%7d%2fpk_active%3d1%2fpk_siteswitch%3E%7bnvb%7d%2fpk_country%3E%7biso_pt%7d%2fpk_city%3E%7bgeo_9833%7d%2fpr_duration%3E%7b0608%7d%2fpk_hotelonly%3d0&fh_sort_by=pr_defaultprice&fh_secondid = nbs_city_cli16a_s18&fh_view=detail&fh_eds=%C3%9F&RoomOccupation1=CLI16A_2a_LO_2_0
Условие 1: У меня есть список каталогов, например folder1
, folder2
, folder3
, folder4
. Я хочу перенаправить, только если URL-адрес содержит любую из перечисленных выше папок, но не для folder5
или любые другие папки, не указанные выше в URL-адресе.
Условие 2: Теперь наступает сложная часть; в пункте назначения он должен принимать идентификатор cli16a
из URL fh_secondid=nbs_city_cli16a_s18
а затем добавьте к целевому URL, как показано ниже
Условие 3: Теперь самое сложное. Добавьте это Y
к целевому URL-адресу, который представляет папку в исходном URL-адресе, например, folder1
знак равно Y
, folder2
знак равно O
, folder3
знак равно B
, folder4
знак равно C
.
Пока что я придумал следующее.
RewriteMap WE NEED TO GET A MAPPING OF TYPE OF HOTEL (not sure what to put here)
RewriteCond %{REQUEST_URI} ==(folder1|folder2|folder3|folder4) [NC]
RewriteCond ${conv-lc:%{QUERY_STRING}} (fh_secondid)=[^_]+_[^_]+_([^_]+)_
RewriteRule ^/nl/_USE RewriteMap Matching text here/ ( not sure what to put here)
Судя по его звукам, вам не обязательно необходимость а RewriteMap
, при условии, что количество каталогов ограничено, как они выглядят, а идентификатор не чувствителен к регистру в целевом URL, что, по вашему мнению, нет (в комментариях).
Для удостоверения личности суффикс («Y», «O», «B» или «C») мы можем создать переменную среды в зависимости от запрашиваемого каталога:
RewriteEngine On
# Assign value to ID_SUFFIX based on the directory being accessed
RewriteRule ^/?folder1 - [E=ID_SUFFIX:Y]
RewriteRule ^/?folder2 - [E=ID_SUFFIX:O]
RewriteRule ^/?folder3 - [E=ID_SUFFIX:B]
RewriteRule ^/?folder4 - [E=ID_SUFFIX:C]
Затем обрабатывайте запрос, только если ID_SUFFIX
env var был установлен, требуемый идентификатор был взят из строки запроса:
# Capture ID and redirect
RewriteCond %{ENV:ID_SUFFIX} .
REwriteCond %{QUERY_STRING} fh_secondid=[^_]+_[^_]+_([^_]+)
RewriteRule ^ /be/_%1%{ENV:ID_SUFFIX}/ [R=302,L]
Выражение %{ENV:ID_SUFFIX}
естественно, относится к ранее установленной переменной env (если вообще). Первоначально мы просто проверяем, что он установлен (т. Е. Содержит что-то) - устанавливается, только если был запрошен один из названных каталогов.
%1
это обратная ссылка на первую захваченную группу в последнем совпавшем CondPattern. т.е. Это содержит идентификатор (например, cli16a
в вашем примере).
Затем это создает замена формы /be/_cli16aY/
и выдает внешнее перенаправление.
Обратите внимание, что в настоящее время это 302-е (временное) перенаправление. Меняйте его на 301 (постоянный), только если вы уверены, что он работает нормально, чтобы избежать проблем с потенциальным кешированием.