【问题标题】:Tomcat valve rewrite not workingTomcat阀门重写不起作用
【发布时间】:2017-01-05 20:25:41
【问题描述】:

我想将静态资源以外的任何链接(例如 js、图像等)定向到我的 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 内容(在浏览器控制台中)。你能建议这里有什么问题吗?

【问题讨论】:

    标签: tomcat mod-rewrite tomcat-valve


    【解决方案1】:

    您的最终规则将所有内容重新写入/index.html

    RewriteRule ^.*$ /index.html [L,QSA]
    

    如果您认为上述规则会首先匹配,那么您是对的,除了对文件的请求,例如/styles.css 与静态工件的表达式不匹配:

    RewriteCond %{REQUEST_URI} ^/(css|img|js|partials|rest|favicon).*$
    

    问题是您要求请求 URI 的 css 部分后面至少有一个字符。对/css/style.css 的请求应该可以工作。

    【讨论】:

    • 感谢您的回答。我没有完全理解你提到的问题。我的 css 和 js 文件如下所示:/myapp/project/css/project-123.css /myapp/project/js/project-123.js 但是,这些显示的是 index.html 内容。
    • 这些文件名都不匹配您的正则表达式模式:它们以/myapp 开头而不是/css
    • 感谢@Christopher 指出问题。我将我的正则表达式更改为(?!.*\.(?:jpg|png|css|js|json|scss)$).*$,现在它可以工作了。
    • 我现在面临一个不同的问题,我的 javascript(jQuery api 和其他 javascript 文件)被加载了两次。你知道我是否在重写或任何其他潜在原因中遗漏了什么?我也在这里作为一个单独的问题提出了这个问题:link
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-22
    • 2015-10-10
    • 1970-01-01
    • 1970-01-01
    • 2011-04-13
    • 2011-09-28
    相关资源
    最近更新 更多