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

nginx и PHP: try_files внутри блока псевдонимов

У меня есть настройка nginx с псевдонимом, и я пытаюсь выполнить правило перезаписи с помощью try_files. Проблема в том, что он предварительно подставляет корень документа и не находит файл. Конфигурация:

server {
    listen      80;
    server_name mysite.com;
    root        /var/www/default;
    index       index.html index.htm index.php;

    location /coolapp {
        alias /home/myhome/coolapp/www/;
        index     index.php;
        try_files $uri $uri/ /home/myhome/coolapp/www/index.php?url=$uri&$args;

        location ~ \.php$ {
            fastcgi_pass  127.0.0.1:9000;
            fastcgi_index index.php;
            include       /etc/nginx/fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $request_filename;
        }
    }
}

И в журнале ошибок nginx:

[error] 21903#0: *2 open() "/var/www/default/home/myhome/coolapp/www/index.php" failed (2: No such file or directory) ...

Почему он добавляет корень в try_files? Я хочу, чтобы псевдоним рассматривался как отдельный корень. Что я здесь делаю не так?

Ты использовал alias где вы должны были использовать другой root.

root добавляет указанный путь к запросу.
alias заменяет путь местоположения, указанный в части пути.

Вы также сталкиваетесь с ошибка, но вы этого не сделаете, если настроите правильную конфигурацию.