Configuration
在 apache ServerAlias 指令中,問號是什麼意思?
如果合適,ServerAlias 可以包含萬用字元。
和
萬用字元 * 和 ? 可用於匹配名稱
我的同事聲稱問號與句點 (
.
) 以外的任何字元匹配,因此可以在“單級”萬用字元中使用。我找不到任何支持這種用法的文件。在
ServerAlias
指令中,問號是什麼意思?請引用文件。
**問號 (
?
) 匹配單個字元,包括句點。**用於比較主機名和ServerAlias
es 的函式是ap_strcasecmp_match
( server/util.c:212 )。// server/util.c int ap_strcasecmp_match(const char *str, const char *expected) { int x, y; for (x = 0, y = 0; expected[y]; ++y, ++x) { if (!str[x] && expected[y] != '*') return -1; if (expected[y] == '*') { while (expected[++y] == '*'); if (!expected[y]) return 0; while (str[x]) { int ret; if ((ret = ap_strcasecmp_match(&str[x++], &expected[y])) != 1) return ret; } return -1; } else if (expected[y] != '?' && apr_tolower(str[x]) != apr_tolower(expected[y])) return 1; } return (str[x] != '\0'); }
假設單獨測試函式是有意義的,很容易看出問號匹配單個字元,包括句點。
ap_strcasecmp_match("foo.bar.com", "?.bar.com") // 1 ap_strcasecmp_match("f.bar.com", "?.bar.com") // 0 ap_strcasecmp_match("fg.bar.com", "?.bar.com") // 1 ap_strcasecmp_match("..bar.com", "?.bar.com") // 0 ap_strcasecmp_match("f.g.bar.com", "???.bar.com") // 0
零是匹配,其他任何都不是。
你的同事是對的。
?
萬用字元確實用於匹配.
對 dns 名稱有效的單個非字元。您可以查看其他幾個提到該
?
字元的文件,如果他們描述了它的使用,他們總是會說“In a wild-card string, ? matches any single character, and * matches any sequences of characters.
不幸的是,我認為它只是被忽略了,到處都提到了這兩種語法的含義。