我正在使用基于PHP和.htaccess的CSS和JS脚本的缓存清除引擎。所以在PHP中我构建了以下函数:
function CreateFileFingerprint($RelativePath)
{
$PathInfo = pathinfo($RelativePath);
return $PathInfo['dirname'].'/'.$PathInfo['filename'].'.'.filemtime(DATA_BASEPATH.$RelativePath).'.'.$PathInfo['extension'];
}
在我的.htaccess中,我使用过期标题:
FileETag None
Header Unset ETag
ExpiresActive On
ExpiresDefault A2592000
ExpiresByType application/javascript A31536000
ExpiresByType text/css A31536000
ExpiresByType text/javascript A31536000
<FilesMatch "[^\.php]$">
Header Append Cache-Control "public"
</FilesMatch>
还有一点mod_rewrite规则:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)\.(\d+)\.(css|js)$ $1.$3 [L]
然后在我的PHP页面中,我使用以下代码:
echo '<link rel="stylesheet" href="'.self::CreateFileFingerprint('/styles/style-base.css').'" media="all"/>';
一切正常,但现在我想为我的网站实现一个通用的PHP ErrorDocument,如解释here。问题是我需要将以前的mod_rewrite规则与链接中建议的规则合并:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ /errors/error.php [L]
是的,有人能帮帮我吗?
非常感谢!
答案 0 :(得分:0)
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule . – [S=2]
RewriteRule ^(.+)\.(\d+)\.(css|js)$ $1.$3 [L]
RewriteRule ^.*$ /errors/error.php [L]
从条件中删除否定,并告诉它不要尝试匹配重写文件或目录。认为应该工作