RegEx用于重写具有未知和变化的文件夹深度的多文件夹路径和文件名

时间:2013-06-11 10:04:56

标签: regex apache rewrite

我需要捕获并重写一个网址路径,用~替换每个/~结尾重写,后跟原始文件名(扩展名为.jpg)路径。如果路径末尾的文件名以“AM”,“tn _”或“_cat”开头,则不应进行重写。

此代码适用于已知的单文件夹深度:
RewriteRule ^ImageFolio4_files/1/([^/]+)/((?!AM|tn_|_cat)[^.]+\.jpg)$ /ImageFolio4_files/cache/images/~$1~$2 [L,R=302,NC]

以下是要重写的原始路径的示例:
/ImageFolio4_files/1/Casual_Portraits/abc123_789-xyz.jpg

这是期望的最终结果:
/ImageFolio4_files/cache/images/~Casual_Portraits~abc123_789-xyz.jpg

我需要修改RegEx以在文件名之前容纳1或2个额外的子文件夹,我不知道从哪里开始。以下是较长文件夹路径和所需最终结果的示例:
/ImageFolio4_files/1/Casual_Portraits/Outdoors/Beach/abc123_789-xyz.jpg
改写为:
/ImageFolio4_files/cache/images/~Casual_Portraits~Outdoors~Beach~abc123_789-xyz.jpg

非常感谢任何帮助。

艺术思想 加利福尼亚州帕萨迪纳

1 个答案:

答案 0 :(得分:0)

如果您想要处理多达三个级别,您可以使用以下内容:

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

请注意文件名的表达式更改:[^./]+而不是[^.]+,因此它与任何其他子文件夹都不匹配。