.htaccess重写规则的复杂正则表达式

时间:2017-06-27 13:55:17

标签: regex .htaccess

假设应使用网址\xy12345.jpg

通过HTTP访问图片文件

我们有一个图像文件的目录结构,如下所示:

images/x/y/xy12345/file

其中x是文件名的第一个字符,y是第二个字符。

我需要.htaccess文件的RewriteRule,并以:

开头

RewriteRule ^([A-Za-z0-9-]+).jpg images/x/y/$1/file

我认为$1对于文件名是正确的,但不知道对xy使用什么(第一个和第二个字符)。

如果我知道第一个应该是'x',那么它将是^x,但它可以是任何A-Za-z0-9-。那么取代xy的是什么?或者更一般地说,如何在不必匹配特定字符的情况下获得第一个和第二个字符?

2 个答案:

答案 0 :(得分:1)

您可以使用这样的嵌套捕获组:

RewriteRule (([A-Za-z0-9-])([A-Za-z0-9-])[A-Za-z0-9-]+).jpg$ images/$2/$3/$1/file

$2$3分别捕获 - 前两个字符,而$1仍然捕获整个文件名(包括xy)。

查看演示here

答案 1 :(得分:0)

我认为你在使用\ 1和捕获的正确轨道上。这对你有用吗?

RewriteRule ^([a-zA-Z0-9])([a-zA-Z0-9])(.*) images/$1/$2/$3/file

我在Python中有一个小例子可以运行:

text = "xy12345.jpg"
newtext = re.sub(r"([a-zA-Z0-9])([a-zA-Z0-9])(.*)", r"images/\1/\2/\3", text)
print (newtext)
>> images/x/y/12345.jpg

几乎只需要捕获更多你作为一个字符类写出的内容,然后将其重新输入。这将匹配该范围内的一个字符[a-zA-Z0-9]。我们可以调整最后一个(。*),具体取决于你是否需要.jpg部分。