重写规则,但静态内容除外

时间:2010-02-02 11:21:52

标签: apache .htaccess mod-rewrite

我当前的htaccess文件如下所示:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f [NC]
RewriteCond %{REQUEST_FILENAME} !-d [NC]
RewriteRule ^(.*)$ index.php?page=$1 [L,QSA]

这对我来说很好,但我想尝试减少服务器负载,所以我在RewriteEngine On行下面添加了这行,以便在加载静态内容时停止处理:

RewriteCond %{REQUEST_FILENAME} !.*jpg$|.*gif$|.*png$|.*css$|.*js$|.*txt$|.*ico$|.*pdf$ [NC]

这是最有效的写作方式吗?感谢

1 个答案:

答案 0 :(得分:3)

在第2行中,您已检查是否存在所请求的文件(!-f),因此无需添加您的行,但如果您想避免,则可以使用新的重写条件替换第2行返回其他文件,如.php文件。 Performancewise我不认为这会加速apache,并且你的Web应用程序还有其他一些性能漏洞。

那就是说,你的模式可能不是你想象的那样,例如.*jpg$也匹配mysuperjpg。您可能正在寻找\.jpg$,因为。是正则表达式的特殊字符。你可以这样做:

RewriteCond %{REQUEST_FILENAME} !\.(jpg|gif|png|css|js|txt|ico|pdf)$ [NC]