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 接收第一个 URL 中“.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

我想在第二个 URL 中的 .zul 后面放置“?locale=de-DE”。

有人能告诉我我做错了什么吗?任何帮助都将不胜感激。

此致

答案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

实际上,在花了几个小时研究 mod_rewrite API 之后,我终于明白了。

Apache 模块 mod_rewrite - Apache HTTP 服务器

代替:

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

我用了:

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

相关内容