我有tomcat 8重写工作,但似乎在rewrite.config中丢失了导致最后一个条件不执行的东西.为了其他人的利益,我让RewriteValve适用于我的特定应用程序,而不是全局.对我有用的是下面给出的.
在我的应用程序的META-INF context.xml文件中,我已包含以下行
<Valve className="org.apache.catalina.valves.rewrite.RewriteValve" asyncSupported="true"/>
Run Code Online (Sandbox Code Playgroud)
在我的应用程序的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
Run Code Online (Sandbox Code Playgroud)
现在,如果URI是js,css等,或者如果URI以/ api/i开头,则表示正在评估重写规则,并且没有进行替换.即在urls下方似乎工作正常,并且没有进行替换.localhost:8080/api/abc/xyz,localhost:8080/css/abc.min.css
但由于某种原因,即使URI有一个有效的被它击中,最后一条规则也没有被击中.像localhost:8080/def/ghi这样的URL应该被重定向到index.html,但它似乎没有被重写.我不确定我在rewrite.config中丢失了什么导致此行为.我可以搬到一个!条件也做重写,但只是想在我使用Mulitple RewriteRule组合时明白我的理解.
任何帮助表示赞赏.