Ошибка Apache RewriteRule при добавлении локалей в новый URL

Ошибка Apache RewriteRule при добавлении локалей в новый URL

Я занимаюсь перенаправлением URL-адреса и хотел бы использовать директиву «RewriteRule» в этом процессе.

В настоящее время у меня есть следующее правило:

 RewriteRule ^/application/web/reservation/index.jsp https://application.domain.com/application2/web/reservation/audioForm.zul [R,L]

Однако я также хочу, чтобы это работало, если локаль добавляется в конец первого URL. Это могут быть различные локали (никогда не статичные), поэтому я хочу, чтобы RewriteRule брал все, что идет после '.jsp' в первом URL, и помещал это после '.zul' во втором.

Например, что-то вроде:

RewriteRule ^/application/web/reservation/index.jsp(*)$ https://application.domain.com/application2/web/reservation/audioForm.zul$1 [R,L]

Я думаю, что я неправильно использую синтаксис для заменяющей части:

(*)$ and $1 respectively

Чтобы вы могли увидеть, как выглядит ссылка с учетом локали, я разместил пример ниже:

https://application.domain.com/application/web/reservation/index.jsp?locale=de-DE

Я бы хотел поместить «?locale=de-DE» после .zul во втором URL.

Может кто-нибудь сказать мне, что я делаю не так? Любая помощь будет очень признательна.

С наилучшими пожеланиями

решение1

На самом деле ваш ответ неверен.

Чтобы соответствовать определенному(здесь важно конкретное слово)Строка запроса, например, в примере, который вы упоминаете "?locale=de-DE'", вы бынужен RewriteCondДелать это.

Но в этом конкретном случае, поскольку целевой URL не указывает строку запроса, поведение mod_rewrite по умолчанию заключается в добавлении к нему исходной строки запроса (какой бы она ни была), если только вы не укажете флаг QSD (отбрасывание строки запроса).

Итак, вкратце:

RewriteRule ^/application/web/reservation/index.jsp https://application.domain.com/application2/web/reservation/audioForm.zul [R,L]

или даже:

RewriteRule ^/application/web/reservation/index.jsp$ https://application.domain.com/application2/web/reservation/audioForm.zul [R,L]

будет соответствовать запросу:
"/application/web/reservation/index.jsp?whatever"
и добавит любую строку запроса к указанной вами цели:
"https://application.domain.com/application2/web/reservation/audioForm.zul" поскольку в нем не указана строка запроса.

решение2

На самом деле я понял это после пары часов экспериментов и изучения API mod_rewrite.

Модуль Apache mod_rewrite - HTTP-сервер Apache

Вместо:

^/application/web/reservation/index.jsp(*)$

Я использовал:

^/application/web/reservation/index.jsp(.*)

Связанный контент