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

Почему nginx не любит мои $ args?

У меня есть сайт WordPress, расположенный по адресу mysite.com/blog, файлы которого находятся в /var/www/mysite/wordpress. Почему, когда я приезжаю mysite.com/blog/test, удаляется ли мой вложенный блок местоположения, только если я удалю $args из try_files?

server {
    server_name mysite.com;

    location /blog {
        alias /var/www/mysite/wordpress;
        try_files $uri $uri/ /blog/index.php$args;

        location ~ \.php {
            # This is only reached if I remove $args from try_files
            return 401; # For testing purposes 
        }
    }
}

Вот соответствующая ошибка в журнале:

"/usr/share/nginx/html/index.php" failed (2: No such file or directory)

Потому что ты забыл ? между index.php и $args. Удобная переменная $is_args содержит ? при необходимости и пусто, если не было строки запроса.

try_files $uri $uri/ /blog/index.php$is_args$args;

Конечно, с WordPress вам не нужно использовать $args вообще, поскольку он получает строку запроса в другом месте:

try_files $uri $uri/ /blog/index.php;

достаточно.

Похоже, вы используете try_files с участием alias директива. Это давняя ошибка в nginx используйте root вместо этого директива.