我正在重定向 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(.*)