Разрешить доступ к определенному 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. Означает ли это, что его не существует или он где-то ранее заблокирован?

Спасибо.

0
задан 20 April 2017 в 05:11
1 ответ

Если вы хотите разрешить только один 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 ). Затем мы проверяем, является ли аргумент параметра текстовым значением . Если это так, мы передаем обработку в файл PHP.

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

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

1
ответ дан 4 December 2019 в 16:17

Теги

Похожие вопросы