
Я занимаюсь перенаправлением 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(.*)