我正在为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有很多开销,我认为这会更快。
非常感谢您提前提供任何帮助!
答案 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