Я настраиваю nginx с поддержкой нескольких доменов или подстановочных знаков для удобства, вместо того, чтобы настраивать 50+ разных доступных сайтов/* файлов. Надеюсь, этого достаточно, чтобы показать вам, что я пытаюсь сделать. Некоторые из них являются статическими сайтами, некоторые из них динамичны, обычно устанавливается Wordpress.Конфигурация виртуального хоста nginx с несколькими доменами
Если index.php существует, все работает так, как ожидалось.
Если запрашивается файл, который не существует (missing.html), то возникает ошибка 500 из-за перезаписи. Вошедшая ошибка:
* 112 переписывание или внутренний цикл перенаправления при обработке «/index.php/index.php/index.php/index.php/index.php/index.php/index.php/ index.php/index.php/index.php/index.php/missing.html»
базовая конфигурация Nginx в настоящее время я использую это:
`
listen 80 default;
server _;
...
location/{
root /var/www/$host;
if (-f $request_filename) {
expires max;
break;
}
# problem, what if index.php does not exist?
if (!-e $request_filename) {
rewrite ^/(.*)$ /index.php/$1 last;
}
}
...
`
Если index.php не существует, и файл также не существует, я бы хотел, чтобы он был с ошибкой 404. В настоящее время nginx не поддерживает несколько условий if или вложенных, если так мне нужно обходное решение.
Вы пробовали «перерыв» вместо «последнего» в переписывании? – rzab
нет, но мне удалось заставить его работать сейчас, используя try_files вместо условия if/rewrite. 'try_files $ uri $ uri//index.php$uri @ 404;' Если index.php не существует, он перейдет в местоположение @ 404 – Poe
'try_files' - это предлагаемый способ решения таких проблем, поскольку' if' не ведет себя слишком хорошо, и его использование не рекомендуется. Вы можете указать статус возврата непосредственно в 'try_files' вместо имени location:' try_files $ uri $ uri//index.php$uri = 404; ' –