【发布时间】:2016-04-09 18:05:38
【问题描述】:
我已经让 tomcat 8 重写工作,但似乎在 rewrite.config 中丢失了导致最后一个条件不执行的内容。 为了他人的利益,我有 RewriteValve 为我的特定应用程序而不是全局工作。下面给出了对我有用的方法。
在我的应用程序的 META-INF context.xml 文件中,我已包含以下行
<Valve className="org.apache.catalina.valves.rewrite.RewriteValve" asyncSupported="true"/>
在我的应用程序的 WEB-INF 中,我有一个 rewrite.config 文件,在合并了在另一个 tomcat 8 重写线程中看到的反馈后,该文件说明了以下内容,关于使用 {REQUEST_FILENAME} 为空的问题。我没有使用 REQUEST_FILENAME,我的配置如下所示。
RewriteCond %{REQUEST_URI} .*\.(css|js|html|png|jpg|jpeg|gif|txt|ico) [OR]
RewriteCond %{REQUEST_URI} ^\/api\/ [OR]
RewriteRule ^(.*)$ -
RewriteRule ^(.*)$ /index.html
现在,如果 URI 是 js、css 等,或者 URI 以 /api/ 开头,我看到正在评估重写规则并且没有进行替换。 即以下网址似乎可以正常工作,并且没有进行任何替换。 本地主机:8080/api/abc/xyz,本地主机:8080/css/abc.min.css
但是由于某种原因,即使 URI 有一个有效的规则可以被它击中,最后一条规则也根本没有被击中。例如。像 localhost:8080/def/ghi 这样的 URL 应该被重定向到 index.html,但它似乎没有被重写。我不确定我在 rewrite.config 中缺少什么导致这种行为。 我可以搬到一个!也有条件进行重写,但只是想在我使用 Mulitple RewriteRule 组合时弄清楚我的理解。
感谢任何帮助。
【问题讨论】:
标签: apache tomcat mod-rewrite url-rewriting