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

Разрешить доступ к определенному URL с одним параметром и значением в Nginx rewrite

У меня есть Nginx и следующий URl, к которому я не могу получить доступ:

http://www.example.com/file.php?parameter=value

В настоящее время у меня есть настройки правил Nginx, которые блокируют доступ к данному примеру.

Как я могу разрешить этот конкретный URL-адрес и заставить его работать?

location http://www.example.com/file.php?parameter=value {
    try_files $uri $uri/ /file.php?$args;
}

ИЛИ:

location ~* http://www.example.com/file.php?parameter=value {
    allow all;
}

Может как то так ?:

~ "^parameter=value"

Этот конкретный как есть, и я не могу получить к нему доступ. У меня ошибка 404/405. Значит ли это, что его не существует или он где-то заблокирован раньше?

Спасибо.

Если вы хотите разрешить только один URL с определенными параметрами, вам нужно сделать немного больше, чем просто location блок. Это потому, что можно сопоставить только нормализованные URI в location директивы.

Вы можете попробовать что-то вроде этого:

location /file.php {
    if ($arg_parameter = "value") {
        try_files /file.php$is_args$args =404;
    }
    return 404;
}

это location блок соответствует URI /file.php (домен сопоставляется через server_name директива). Затем мы проверяем, parameter аргумент - это текст value. Если это так, то мы передаем обработку в файл PHP.

В противном случае мы возвращаем код ошибки 404.

Возможно, вам будет проще выполнить проверку этого условия в вашем PHP-скрипте.