如何编写以下规则来自定义特定类型的文件?

时间:2012-01-31 05:27:41

标签: php apache .htaccess mod-rewrite webserver

看,规则是:

RewriteCond %{REQUEST_FILENAME} !-f

我将此规则放在.htaccess中我告诉网络服务器:忽略URL中的所有文件路径。

例如:http://www.foo.com/images/file.jpg

此文件将被忽略,如果此URL由脚本(.php)处理并返回文件内容,则仅显示图像。我需要这样做,但不是所有的文件:

例如:.JS文件NOT和其他文件类型。

如何“重写”该规则以忽略特定类型的文件或仅适用于特定文件,如:

仅限ACCEPTS:JPG,PNG,JPEG,MP3

RewriteCond %{REQUEST_FILENAME}.(jpg|png|jpeg|mp3 ... ) !-f

OR

NO ACCEPTS:JS,TXT,CSS

RewriteCond !%{REQUEST_FILENAME}.(js|txt|css| ... ) !-f

2 个答案:

答案 0 :(得分:1)

IGNORE ALL THE FILE PATHS IN THE URL.

您要告知检查所请求文件是否存在。 !-f表示文件不存在于请求URL指向的物理位置"。因此,如果文件实际存在于请求的位置,则不会执行php脚本。目前尚不清楚为什么要添加一些排除,因为如果文件存在,无论如何都会被请求,如果它不存在,你的脚本应生成404错误的页面,否则它将是服务器生成的页面。可能不那么花哨:))

除了第一个答案,它应该是,

RewriteCond %{REQUEST_FILENAME} !\.(jpg|png|jpeg|mp3)$ [NC]

为了摆脱区分大小写。

结合在一起

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !\.(jpg|png|jpeg|mp3)$ [NC]
# your RewriteRule goes here

答案 1 :(得分:0)

如果网址以列出的扩展名之一结束,则匹配:

RewriteCond %{REQUEST_FILENAME} \.(jpg|png|jpeg|mp3)$

如果网址未以列出的扩展名之一结束,则匹配:

RewriteCond %{REQUEST_FILENAME} !\.(jpg|png|jpeg|mp3)$

默认条件由“AND”连接。只有当A和B都匹配时才会匹配:

RewriteCond A
RewriteCond B

如果A B匹配,则匹配:

RewriteCond A [OR]
RewriteCond B

更多详情:http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritecond