mod_rewrite .php的不匹配和斜杠

我试图编写一套重写规则,将静态资产的所有请求发送到我们的CDN,同时保持对服务器本地的PHP文件的请求。 我有一个适用于“匹配除.php之外的任何内容”的规则,但它也匹配网站的斜线或根目录,并将初始请求redirect到CDN。

RewriteRule !^(.*\.php)$ http://somecdn.com/$1 [NC,L,R=301] 

我一直在努力使用RewriteCond来匹配斜线和.php文件,我相信我只是缺less一块。

 RewriteCond {REQUEST_URI} !^/$ RewriteCond {REQUEST_URI} !^(.*\.php)$ RewriteRule ^(.*)$ http://somecdn.com/$1 [NC,L,R=301] 

这是我的第一条规则,但仍然与斜线匹配。

我怎么能说:“匹配一切,但斜线和.php然后发送一切其他的CDN”?

适用于我的scheme的解决scheme是将RewriteCond移出VirtualHost块并移入目录块。

 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !^(.*\.php)$ RewriteRule ^(.*)$ http://somecdn.com/$1 [NC,L,R=301] 

添加!-d以匹配任何不是目录的东西,都有一个好处,就是允许我们的CMS生成的干净的URL在本地处理,而不是发送到CDN。