Английский не является моим родным языком, примите мои извинения за любые языковые проблемы.
Я хочу, чтобы конфигурация с автоматическим корневым доступом, независимо от домена, выглядела так (с использованием nginx):
root /var/www/${http_host}/public
Но я хочу, чтобы корневой домен и «www» указывали на один и тот же каталог, но без «www» :
« www.mysite.com » и « mysite.com »
root / var / www / mysite.
Да, я видел, что есть и другие подобные вопросы ( как этот ), но мне было трудно удалить www. Простите! Я не буду использовать такое общее имя_сервера , но это должно работать даже с: Но также и так: ПРИМЕЧАНИЕ: Он должен работать с из пути сертификата ssl. server_name ~.+$;
listen 443 ssl http2;
server_name ~ ^((www|blog|account|bbs)\.)?mysite.com$;
root /var/www/${http_host}/public
ssl_certificate /ssl/${http_host}/{http_host}.pem
ssl_certificate_key /ss/${http_host}/{http_host}.key
Вы можете использовать карту
в блоке http
следующим образом:
map $http_host $rootdir {
"~^(?:www\.)?(<domain>.+)$ $domain;
}
А затем вы можете использовать следующее на своем сервере
блок:
root /var/www/$rootdir/public;
В директиве map
мы конвертируем переменную $ http_host
, содержащую заголовок HTTP-запроса Host
, в $ rootdir
с использованием регулярного выражения.
В регулярном выражении мы извлекаем фактическое имя домена в переменную $ domain
из заголовка Host
, исключая www.
префикс, если он существует. Затем мы используем переменную $ domain
для создания переменной $ rootdir
.
Однако этот метод может не работать с SSL по причинам, указанным в комментарии. В этом случае вам необходимо реализовать систему управления конфигурацией, которая генерирует файлы конфигурации для доменов из шаблонов.