当子域不存在时如何避免出现错误?

当子域不存在时如何避免出现错误?

每个子域名都在一个单独的文件夹中。我使用以下代码捕获子域名并将根目录设置为正确的文件夹:

server_name ~^(?<sub>.+)\.mysite\.com$;
root "/path/to/my/site/$sub";

当子域不存在时,它会抛出 404 错误,但不使用我的 404 错误页面,因为根目录设置为不存在的目录。

我可以用这个代码解决这个问题:

server_name ~^(?<sub>.+)\.mysite\.com$;
if (!-d "/path/to/my/site/$sub") {
    set $sub www;
    #set $sub "";
}
root "/path/to/my/site/$sub";

但显然这是错误的,因为if 是邪恶的,或者我是否发现了使用 的正确例外情况if

答案1

我的错误页面代码有问题。现在代码可以正常工作了,这让我可以修复另一个问题(无扩展的带重定向的 php)。

error_page 404 =200 /404.php;    
location = /404 {
    #root "/path/to/404/page";
}

我尝试将根设置在内部,location = /404但不起作用。我发现没有办法避免该if语句并使其正常工作。

if (!-d "/path/to/my/site/$sub") {
    return 301 https://www.example.com$request_uri;
}

我认为,重定向语句数量越少越好if,因为网站可能会崩溃。

甚至 Plesk Onyx 的自动生成代码也使用了一个if语句:

if ($host ~* ^example\.com$) {
    return 301 https://www.$host$request_uri;
}

if然而,如果我的网站没有使用语句也能 100% 正常工作,我还是希望完全避免使用语句。

相关内容