Итак, вот чего я пытаюсь достичь. У меня есть эта ссылка, я хочу перенаправить 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% 3E% 7bgeo_9833_ 7d0% 2 fh_secondid = nbs_city_cli16a_s18 & fh_view = detail & fh_eds =% C3% 9F & RoomOccupation1 = CLI16A_2a_LO_2_0
Условие 1: У меня есть список каталогов, таких как папка1
, папка2
, папка3
, папка4
. Я хочу выполнить перенаправление только в том случае, если URL-адрес содержит любую из перечисленных выше папок, но не для folder5
или любых других папок, не указанных выше в URL-адресе.
Условие 2: Теперь наступает сложное часть; в месте назначения он должен взять идентификатор cli16a
из URL fh_secondid = nbs_city_cli16a_s18
, а затем добавить его к URL назначения, как показано ниже
Условие 3: Теперь самое сложное. Добавьте этот Y
в целевой URL, который представляет папку в исходном URL, например, folder1
= Y
, папка2
= O
, папка3
= B
, папка4
= 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 (постоянный), только если вы уверены, что он работает нормально, чтобы избежать проблем с потенциальным кэшированием.