Назад | Перейти на главную страницу

Ошибка 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.

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

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

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

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

Я действительно понял это после пары часов игры и исследования API mod_rewrite.

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

Вместо того:

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

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

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