Назад | Перейти на главную страницу

Как я могу предотвратить ошибку, когда субдомен не существует?

Каждый поддомен находится в отдельной папке. Я захватываю поддомен и устанавливаю корень в правильную папку с помощью этого кода:

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.

Возникла проблема с кодом моей страницы с ошибкой. Теперь это работает, что позволило мне исправить другую проблему (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% правильно без них.