Tomcat 阀重写不工作
Tomcat valve rewrite not working
我想将静态资源(例如 js、图像等)以外的任何 link 定向到我的 index.html。我做了以下更改。
我在 app.war/META-INF
目录中添加了一个 context.xml
,其中包含:
<Context>
<Valve className="org.apache.catalina.valves.rewrite.RewriteValve" />
</Context>
我在 app.war/WEB-INF
目录中也有 rewrite.config
,其中包含:
RewriteCond %{REQUEST_URI} ^/(css|img|js|partials|rest|favicon).*$
RewriteRule ^.*$ - [L]
RewriteRule ^.*$ /index.html [L,QSA]
但是,通过上述设置,我的所有 js 和 css 文件都会显示 index.html
内容(在浏览器控制台中)。你能建议这里的问题是什么吗?
您的最终规则将所有内容重写为 /index.html
:
RewriteRule ^.*$ /index.html [L,QSA]
如果您认为上述规则将首先匹配,那么您是对的,除了对文件的请求,例如/styles.css
与您对静态工件的表达式不匹配:
RewriteCond %{REQUEST_URI} ^/(css|img|js|partials|rest|favicon).*$
问题是您要求请求 URI 的 css
部分后面至少有一个字符。对 /css/style.css
的请求应该有效。
我想将静态资源(例如 js、图像等)以外的任何 link 定向到我的 index.html。我做了以下更改。
我在 app.war/META-INF
目录中添加了一个 context.xml
,其中包含:
<Context>
<Valve className="org.apache.catalina.valves.rewrite.RewriteValve" />
</Context>
我在 app.war/WEB-INF
目录中也有 rewrite.config
,其中包含:
RewriteCond %{REQUEST_URI} ^/(css|img|js|partials|rest|favicon).*$
RewriteRule ^.*$ - [L]
RewriteRule ^.*$ /index.html [L,QSA]
但是,通过上述设置,我的所有 js 和 css 文件都会显示 index.html
内容(在浏览器控制台中)。你能建议这里的问题是什么吗?
您的最终规则将所有内容重写为 /index.html
:
RewriteRule ^.*$ /index.html [L,QSA]
如果您认为上述规则将首先匹配,那么您是对的,除了对文件的请求,例如/styles.css
与您对静态工件的表达式不匹配:
RewriteCond %{REQUEST_URI} ^/(css|img|js|partials|rest|favicon).*$
问题是您要求请求 URI 的 css
部分后面至少有一个字符。对 /css/style.css
的请求应该有效。