RegEx将不同长度的文件夹结构和文件名重写为字符串

时间:2013-06-09 18:49:55

标签: regex apache mod-rewrite

这是我正在使用的代码,在@anubhava的帮助下开发,用于重写CGI脚本生成的路径,将路径从我的jpg图像文件的位置重定向到另一个包含水印图像文件的文件夹。与原始文件相同的文件夹结构组织,但排除以tn_AM(加_category_image.jpg)开头的文件:

RewriteRule ^ImageFolio4_files/1/([^/]+)/((?!AM|tn_)[^.]+\.jpg)$ /ImageFolio4_files/cache/images/~$1~$2 [L,R=302,NC]    

原始路径:

/ImageFolio4_files/1/Casual_Portraits/abc123_789-xyz.jpg

以上RegEx可以正确生成此输出:

/ImageFolio4_files/cache/images/~Casual_Portraits~abc123_789-xyz.jpg  

我的挑战:我需要在ImageFolio4_files/1/结构下方最多容纳三个文件夹的多文件夹结构。目前的代码不适合。我还需要排除名为_category_image.jpg的任何文件,这些文件出现在ImageFolio4_files/1/下面的每个文件夹级别(这些文件是类别名称旁边显示的唯一小显示图标)

我真的不知道如何容纳多文件夹结构,所以感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

首先,改变

([^/]+)/     to     (([^/]+)/)+

在你的表达中。 第二,改变

(?!AM|tn_)    to    (?!AM|tn_|_category_image.jpg)

您可以使用负向前瞻(?!)作为整个文件名,它不会占用字符,只检查正则表达式“AM | tn_ | _category_image.jpg”是否与实际位置匹配。< / p>