我正在使用一些简单的 Jetty 重写规则
<Configure id="FileServer" class="org.eclipse.jetty.server.Server">
<Get id="oldhandler" name="handler"/>
<Set name="handler">
<New id="Rewrite" class="org.eclipse.jetty.rewrite.handler.RewriteHandler">
<Set name="handler"><Ref id="oldhandler"/></Set>
<Call name="addRule">
<Arg>
<New class="org.eclipse.jetty.rewrite.handler.RewriteRegexRule">
<Set name="regex">/fake-uri/(.*)</Set>
<Set name="replacement">/real-uri/$1</Set>
</New>
</Arg>
</Call>
<Call name="addRule">
<Arg>
<New class="org.eclipse.jetty.rewrite.handler.HeaderPatternRule">
<Set name="pattern">/real-uri/*</Set>
<Set name="name">Cache-Control</Set>
<Set name="value">no-cache,no-store</Set>
</New>
</Arg>
</Call>
</New>
</Set>
</Configure>
如果我/fake-uri/index.html
在浏览器中请求,则响应包含将提供的内容/real-uri/index.html
并应用Cache-Control标头。但是,如果我重新排序规则以使标头规则高于正则表达式规则,则Cache-Control标头对于/fake-uri/index.html
.
似乎顺序在这里很重要,但我正在尝试锻炼正在发生的事情。根据文档
HeaderPatternRule - 添加/修改 HTTP 标头作为响应
我不确定默认值是什么,但我试过了
<Set name="rewriteRequestURI">true</Set>
在处理程序上。
它似乎没有改变任何东西,但我认为如果请求URI 被重写,那么 URI 重写规则出现在与适用于输出头的头重写相关的位置并不重要。即使rewriteRequestURI设置为true,标题规则也必须排在第二位才能达到预期的效果。那么,当我设置rewriteRequestURI时,为什么顺序很重要?