每个子域名都在一个单独的文件夹中。我使用以下代码捕获子域名并将根目录设置为正确的文件夹:
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% 正常工作,我还是希望完全避免使用语句。