我希望任何少于六个字符的子域返回 404 -
例如,abcd.example.com
应该返回一个 404,但stackoverflow.example.com
返回 index.html
我试过以下 -
location ~ ^/[a-z0-9-_]{0,2}$
return 404;
}
这给了我一个错误-unknown directive "0,2}$"
这可能吗?
提前致谢
我希望任何少于六个字符的子域返回 404 -
例如,abcd.example.com
应该返回一个 404,但stackoverflow.example.com
返回 index.html
我试过以下 -
location ~ ^/[a-z0-9-_]{0,2}$
return 404;
}
这给了我一个错误-unknown directive "0,2}$"
这可能吗?
提前致谢
我可以在您的代码中发现几个语法错误:
Nginx 使用花括号{
}
来指定内部指令,因此当您使用{0,2}
它时会尝试将其读取为指令 - 您需要双引号以避免这种情况;
在你之后$
,你应该有一个{
为你的location
声明打开指令。
但是最大的问题是location
与子域无关 - 您正在寻找的是server_name
在上面的阶段location
。在文档中阅读有关服务器名称的更多信息。
注意:这是未经测试的代码;
我会尝试以下方法:
server {
listen 80;
# We require the expression in double quotes so the `{` and `}` aren't passed as directives.
# The `\w` matches an alphanumeric character and the `{7}` matches at least 7 occurrences
server_name "~^\w{7}\.example\.com";
location / {
# do_stuff...;
}
}
server {
listen 80;
# We require the expression in double quotes so the `{` and `}` aren't passed as directives.
# The `\w` matches an alphanumeric character and the `{1,6}` matches no more than 6 occurrences
server_name "~^\w{1,6}\.example\.com";
location / {
return 404;
}
}
正如我所说,上述内容未经测试,但应该为您提供良好的基础。您可以在文档中阅读有关PCRE
正则表达式 nginx users 和server_names的更多信息。