在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}的匹配。
希望有所帮助!