Apache Redirect на основе каталога соответствие & Добавьте еще одну букву к URL назначения

Итак, вот чего я пытаюсь достичь. У меня есть эта ссылка, я хочу перенаправить 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)
2
задан 10 August 2018 в 18:01
1 ответ

Судя по всему, вам не обязательно нужна 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 (постоянный), только если вы уверены, что он работает нормально, чтобы избежать проблем с потенциальным кэшированием.

0
ответ дан 3 December 2019 в 13:54

Теги

Похожие вопросы