如何使用正则表达式提取字符串

时间:2013-11-28 19:17:11

标签: php regex .htaccess image-resizing

我正在使用这种技术来动态调整图像大小,使用.htaccess和一些php脚本。

在.htaccess中我有这个:

# BEGIN ImageResizing
<ifmodule mod_rewrite.c>
 RewriteEngine on
 RewriteBase /

 RewriteRule ^img-small/([A-Za-z0-9/_-]+).(jpg|gif|png)$ images.php?max_width=100&imgfile=$1.$2
</ifmodule>
# END ImageResizing

images.php是执行实际调整大小的脚本

这个正则表达式:

^img-small/([A-Za-z0-9/_-]+).(jpg|gif|png)$

匹配此路径:

http://yoursite.com/img-large/myimagepath/myimage.jpg

然后将其作为参数$ 1. $ 2

发送到images.php脚本
images.php?max_width=100&imgfile=$1.$2

我的问题是:如果我有这样的路径,我怎样才能做到这一点:

http://yoursite.com/myimagepath/min_myimage.jpg

我试图建立一个这样的表达式:

^([A-Za-z0-9/_-]+/)+(min_)([A-Za-z0-9]+).(jpg|gif|png)$

Debuggex Demo

我认为问题出在RewriteRule的第二部分

images.php?max_width=100&imgfile=$1.$2

我试图改为:

images.php MAX_WIDTH = 100安培; imgfile = $ 1 + $ $ 3 4

这是php脚本的第一行:

// max_width and image variables are sent by htaccess

$max_height = 1000;

$image = $_GET["imgfile"];
$max_width = $_GET["max_width"];
if (strrchr($image, '/')) {
$filename = substr(strrchr($image, '/'), 1); // remove folder references
} else {
$filename = $image;
}

$size = getimagesize($image);
$width = $size[0];
$height = $size[1];

2 个答案:

答案 0 :(得分:0)

这对你有用吗? 要匹配的网址:http://yoursite.com/myimagepath/min_myimage.jpg

<强>的.htaccess

RewriteEngine On
RewriteBase /
RewriteRule ^.*/([A-Za-z0-9/_-]+).(jpg|gif|png)$ images.php?max_width=100&imgfile=$1.$2

如果没有,你得到了哪个服务器错误?

答案 1 :(得分:0)

我认为我们需要更明确地了解您希望重写处理的路径和名称的组合。但是这里适用于所有符合基本命名模式的图像,这些模式以您指定的文件扩展名结尾

Fiddle