1

我需要捕获并重写一个 URL 路径,用 a 替换~每个/结束重写的 URL 路径,~后跟原始路径中带有扩展名 (.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

我需要修改正则表达式以在文件名前容纳 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

任何帮助将不胜感激。

艺术心灵加州帕萨迪纳

4

1 回答 1

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]

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

于 2013-06-12T17:24:31.717 回答