.htaccess和mod_rewrite条件

时间:2011-12-06 11:32:45

标签: php .htaccess mod-rewrite

我正在使用基于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]
是的,有人能帮帮我吗? 非常感谢!

1 个答案:

答案 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]

从条件中删除否定,并告诉它不要尝试匹配重写文件或目录。认为应该工作