是否可以将Alias和AliasMatch与Apache混合使用

我有一个通用的别名匹配,如:

AliasMatch ^/plugins/([^/]*)/(.*) /usr/share/tuleap/plugins/$1/www/$2 <DirectoryMatch "/usr/share/tuleap/plugins/([^/]*)/www/"> ... </DirectoryMatch> 

我想为目录插件添加一个特定的configuration。 我试着有一个别名第一,但它不能按预期工作:

 Alias /plugins/git /usr/share/tuleap/plugins/git/www <Directory /usr/share/tuleap/plugins/git/www> ... </Directory> AliasMatch ^/plugins/([^/]*)/(.*) /usr/share/tuleap/plugins/$1/www/$2 <DirectoryMatch "/usr/share/tuleap/plugins/([^/]*)/www/"> ... </DirectoryMatch> 

为“git”设置的特定configuration似乎被忽略,而不是通用configuration。

有没有解决scheme,使其工作?

一个可能的解决scheme是编写一个正则expression式,它与您想要排除的URL不匹配。

AliasMatch的匹配和Apache Web Server中的一些其他指令使用PCRE 。

大多数GNU / Linux发行版都有预编译pcre-tools 。 这个软件包包含一些工具, pcregreppcretest ,非常方便的testingPerl兼容的正则expression式:

 $ cat <<EOF>test.txt > /plugins/git > /plugins/foo > /plugins/bar > EOF $ pcregrep '^/plugins/(?!git)' test.txt /plugins/foo /plugins/bar $ pcretest PCRE version 8.33 2013-05-28 re> /^\/plugins\/(?!git)/ data> /plugins/git No match data> /plugins/foo 0: /plugins/ 

在这种情况下,子expression式(?!git)被称为负向前瞻 :

    Lookahead断言

       前瞻断言以(?=表示肯定断言,(?!表示断言)开始
       负面的断言。 例如,

          \ W +(=;?)

       匹配一个单词后跟一个分号,但不包含半angular英文单词,
       结肠在比赛中,和

         富(?!栏)

       匹配任何不是“bar”后面的“foo”。 注意
       那显然是相似的模式

          (?!FOO)酒吧

       没有发现一个事件前面的“酒吧”的发生
       除“foo”以外; 它发现任何“酒吧”的发生,因为
       当接下来的三个字符是断言(?!foo)总是为真
        “酒吧”。 为了达到另一个效果,需要一个向后看的断言。

       如果你想在一个模式中的某个点强制匹配失败,
       最方便的方法是用(?!)因为一个空string
       总是匹配,所以一个断言,要求没有一个空的
       string必须总是失败。 回溯控制动词(* FAIL)或(* F)
       是(?!)的同义词。