仅当文件在磁盘上不存在时才将请求路由到 Tomcat

仅当文件在磁盘上不存在时才将请求路由到 Tomcat

我在 Tomcat 安装前安装了 Apache 作为反向代理。大多数 URL 都通过JkMountApache 中的指令路由到 Tomcat。

对于一个 URL 模式,我希望仅当在文件系统上找不到静态资产时,Apache 才将请求路由到 Tomcat 工作程序。

大致是这样的:

RewriteCond /var/www%{REQUEST_FILENAME} !-f 
RewriteCond /var/www%{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} ^/assets/.*$
RewriteRule ^/(.*)$ http://${tomcat-ssl}/$1 [P]  # This syntax is wrong

我可以提供什么语法来RewriteRule将请求路由到 Tomcat?

答案1

我发现的解决方案是创建一个Alias,Apache 将其视为给定路径的同义词。我创建了一个,如果文件存在,RewriteRule它将 URL 重写为此。由于与 不匹配,因此不会处理它。如果文件AliasAliasJkMountJkMount没有存在,则RewriteCond失败,则不RewriteRule应用,并且请求被传递给 Tomcat。

Alias /localstaticassets /var/www/assets                                                                                                                                                                                                     
RewriteCond /var/www/%{REQUEST_FILENAME} -f                                                                                                                                                                                                  
RewriteRule ^/assets/(.*)$ /localstaticassets/$1 [QSA,PT]

JkMount /assets/* tomcat-ssl

相关内容