mod_rewrite匹配不是图像的文件

时间:2012-01-23 21:04:14

标签: regex mod-rewrite

我有以下重写规则

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -s
RewriteRule ^wp-content/uploads/(.*)$ dl-file.php?file=$1 [QSA,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

每个对wp-content /上传的请求都由dl-file.php处理,以检查用户是否已登录。

我还需要具备该功能,但可以免费访问图像(png | jpg | gif | jpeg) 我有点失落,我不知道如何修改重写规则来检查任何文件,它没有图像。

1 个答案:

答案 0 :(得分:1)

在重写为dl-file.php的规则之前,您可以为图片插入更具体的规则:

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(wp-content/uploads/.*\.png)$ $1 [L]
RewriteRule ^(wp-content/uploads/.*\.jpg)$ $1 [L]
RewriteRule ^(wp-content/uploads/.*\.gif)$ $1 [L]
RewriteRule ^wp-content/uploads/(.*)$ dl-file.php?file=$1 [QSA,L]

三个规则中的每一个都具有相同的结构,我将解释第一个: 匹配以 .png 结尾的上传内容 使用括号将整个路径保存到变量$ 1。

规则的右侧给出了这个变量,所以如果你看 在一个特定的网址上归结为:

Rewrite wp-content/uploads/some.png wp-content/uploads/some.png [L]

最后的L告诉重写引擎这是最后应用的规则。 所以如果匹配,重写过程就在这里结束,你的png-image就会被提供。