Apache .htaccess 重写时如何排除静态文件 ^Public/?

最近遇到一个问题,PHP + Apache 环境,使用下面的 .htaccess,访问 /Public/Home/css/style.css 时,如果这个文件不存在,这个请求会让 PHP 来处理,这是我不想要的,因为 /Public/ 这个目录我放了静态文件,无论何时都不需要 PHP,重写时如何排除掉?

<IfModule mod_rewrite.c>
    Options +FollowSymlinks
    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?$1 [QSA,PT,L]
</IfModule> 

我看了会文档 https://httpd.apache.org/docs/2.4/mod/mod_rewrite.html 上面的规则看明白了,上面两个 RewriteCond 是 下面一个 RewriteRule 的前提:不匹配已经存在的文件或者目录时生效。但是怎么排除 /Public/ 呢?

mod_rewrite的规则我也看不太明白,我是静态文件也让php来处理的,如果静态文件不存在,由php输出404

 header("HTTP/1.0 404 Not Found");
 echo "<h1> 404 ".$_SERVER['REDIRECT_URL']."</h1>";

如果静态文件存在也由php获取文件mime类型后输出,如果文件比较大(如视频文件),将文件切片输出,这是从go语言写的静态文件服务器那里学过来的

这样貌似可以排除掉 /Public/ 开头的请求:

RewriteCond %{REQUEST_URI} !^/Public/

上周遇到一个问题,CSS 文件名写错了,样式没有生效,但是浏览器 Devtools 也没报告 404,调查之后发现不存在的 CSS 请求竟然被重定向到了首页,掩盖了问题。