htaccess filesmatch正则表达式 - 如何在filesmatch中使用正则表达式来匹配索引[1-999] .htm?

时间:2013-11-29 19:24:30

标签: regex .htaccess

我试图在我的htaccess文件中添加一行,允许index1.htm index2.htm一直到999.下面没有用。

<FilesMatch "^/index[1-999]?\.htm$">
Order allow,deny
allow from all
</FilesMatch>

我虽然这很简单。看起来我很简单。

我一直在寻找StackOverflow,发现一些类似的代码,我试图在上面进行调整,但没有用。

现在,我确实有这个有效:

<FilesMatch "\d{1,3}\.htm?$"> ##1 to three digits
Order allow,deny
allow from all
</FilesMatch>

但是,我如何调整它(前置)以包含字符“索引”(并且只包括那些不是'sindex'或'some-index')所以匹配'index+[1 to 3 digits]+.htm'。

帮助?

2 个答案:

答案 0 :(得分:2)

这是一个符合您要求的模式的正则表达式:

^index[1-9][0-9]{0,2}\.htm$

说明:匹配index,后跟数字19,后跟可选的一位或两位数0至{{ 1}},然后是9

您的关键错误是表达式.htm。括号用于表示character class,而不是整数范围。

这是一个Perl程序,它在示例数据集上演示此正则表达式。 (另请参阅live demo。)

[1-999]

预期输出:

#!/usr/bin/env perl

use strict;
use warnings;

while (<DATA>) {
    chomp;

    if (/^index[1-9][0-9]{0,2}\.htm$/) {
        print "* [$_]\n";
    } else {
        print "  [$_]\n";
    }
}

__DATA__
index0.htm
index1.htm
index2.htm
index2.html
sindex1.htm
some-index1.htm
index11.htm
index111.htm
index999.htm
index1000.htm

答案 1 :(得分:0)

范围不能那样工作。

^/index[1-9][0-9]{,2}\.htm$