htaccess:根据变量检查文件是否存在

时间:2011-06-09 19:10:06

标签: apache .htaccess file-exists

我正在为CMS编写一个动态缩略图创建器,需要动态检查文件是否存在。我目前已经创建了一个htaccess文件,用于检查您请求的文件是否存在,但需要更高级,并根据提交的URL选项“创建”文件检查。

这是我目前拥有的(基于图像ID,而不是名称):

RewriteEngine on

#Check for file existence here and forward if exists
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([0-9]+)-([0-9]+)-([0-9]+)(-(crop))?\.jpg$ thumbnail.php?id=$1&w=$2&h=$3&c=$4 [L,QSA]

基于此网址:

this-is-the-image-name.gif?w=200&h=100&c=true

htaccess文件检查此文件是否存在:

this-is-the-image-name-gif-200-100-crop.jpg

如果它不存在,则将ReriteRules用户改为:

thumbnail.php?name=this-is-the-image-name&type=gif&w=200&height=100&c=true

“裁剪”是可选的,因此如果没有它,之前的网址如下所示:

this-is-the-image-name.gif?w=200&h=100
this-is-the-image-name-gif-200-100.jpg
thumbnail.php?name=this-is-the-image-name&type=gif&w=200&height=100

基本上,我需要RewriteCond根据REQUEST_FILENAME创建的文件名检查文件是否存在。有什么想法吗?

这样的事情:

RewriteCond ^([a-zA-Z0-9-]+).(jpg|gif|png)?w=([0-9]+)&h=([0-9]+)(&c=(-crop))?\.jpg$ %$1-$2-$3-$4-$6.jpg !-f

甚至不确定这是否可行......在这种情况下,我会将所有请求转发给PHP文件,但由于PHP有很多开销,我认为这会更快。

非常感谢您提前提供任何帮助!

1 个答案:

答案 0 :(得分:3)

来自重写文档的

  

RewriteRule反向引用:这些是   形式$ N的反向引用(0 <= N.   &lt; = 9),提供访问权限   分组的部分(在括号中)   模式,来自RewriteRule   受当前的一组影响   RewriteCond条件..

     

的RewriteCond   反向引言:这些是   形式%N的反向引用(1 <= N.   &lt; = 9),提供访问权限   分组部分(再次,在括号中)   模式,从最后匹配   RewriteCond在当前的一套   条件。

# file is a gif
RewriteCond %{REQUEST_FILENAME} .gif$

# capture the and params in () backreferences
RewriteCond %{QUERY_STRING} w=(200)&h=(100)&c=true

# only rewrites for files that do not exist
RewriteCond %{REQUEST_FILENAME}-gif-%1-%2-crop.jpg !-f

# this rewrites not found thumbs to your php script
RewriteRule %.*$ thumbnail.php?name=%{REQUEST_FILENAME}&type=gif&w=%1&height=%2&c=true