什么是Apache相当于Nginx的try_files?

在Nginx中有一个try_files ,一个configuration指令,用于“按顺序检查文件的存在,并返回find的第一个文件”。 我发现这样做非常整齐

 location ~* \.(gif|jpe?g|css|js)$ { try_files $uri 404; } 

这是直接提供静态文件的安全方式,而不会打扰Web框架。 我如何在Apache中做同样的事情?

我通常用mod_rewrite来看这个:

  RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f RewriteRule ^/(.*)$ balancer://app_cluster%{REQUEST_URI} [P,QSA,L] 

这意味着“如果文件系统上不存在文件,则通过我的mod_proxy_balancer集群进行代理”。 否则,如果文件存在于文件系统中,则相对于您的虚拟主机中定义的DocumentRoot ,它仅由Apache提供。

但这不是我最喜欢的方式,主要是因为它需要每个请求stat系统调用。

使用mod_proxy,如果您有足够新的Apache版本,请使用ProxyPassMatch ( 请参阅文档 )。 如:

ProxyPassMatch \.(gif|jpe?g|css|js)$ !

哪个使用! 以表示Apache不应该代理与该正则expression式匹配的请求。

如果您使用的是较早版本的Apache,则可以使用ProxyPass指令,但它只匹配URI前缀(这是我当前的首选方法):

 ProxyPass /images ! ProxyPass /stylesheets ! 

当然,如果你必须像上面提到的那样进行正则expression式匹配,那么你可以简单地修改我在顶部发布的mod_rewrite规则来否定与%{REQUEST_URI}的匹配。

希望有所帮助!