Отключить методы HTTP в Apache

11

Как я могу отключить определенные методы HTTP (например, PUT или TRACE) и заставить Apache отправить HTTP «Метод 405 не разрешен».

Я пробовал директивы Limit и LimitExcept, но они, похоже, отправляют «403 Forbidden».

У меня есть несколько Vhosts - это должно быть во всех из них, в основном httpd.conf.

Greg
источник

Ответы:

14

Действительно кажется, что определить код ошибки немного сложнее, чем следовало бы.

Тем не менее, один обходной путь МОЖЕТ использовать mod_rewrite. Это пришло мне в голову из-за того, что, по крайней мере, в 99% невозможных задач Apache mod_rewrite может предоставить вам танец вуду и решить вашу проблему.

Если ничего не помогает, попробуйте что-то вроде

RewriteEngine On
RewriteCond %{REQUEST_METHOD} !^GET [AND]
RewriteCond %{REQUEST_METHOD} !^POST 
RewriteRule .* /yourerrordocuments/405.html [R=405,L] 

Я знаю, что это, вероятно, не самое лучшее решение, но оно должно работать ...

Янне Пиккарайнен
источник
1
+1 Mod_rewrite voodoo решает все проблемы (для ограниченных наборов из всех).
Крис С
6
Mod_rewrite также запускает медленное регулярное выражение для каждого процесса URL, что замедляет работу сервера. Используйте с осторожностью.
Марчин
Спасибо - хороший трюк, устанавливающий код ответа с R = 405. Я надеялся, что найдется лучший способ, чтобы OPTIONS сообщал правильные значения, но я думаю, что это невозможно
Грег
Какая версия Apache / mod_rewrite поддерживает флаг [AND]? Я вижу только [ИЛИ] (и «и» неявно): httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritecond
asjo
4

Для метода трассировки вы можете добавить это

TraceEnable off

в вашем основном файле конфигурации

AM
источник
2

Чтобы включить механизм перезаписи, добавьте следующее:

 RewriteEngine On 

Обратите внимание, что по умолчанию конфигурации перезаписи не наследуются между виртуальными серверами. Добавьте RewriteEngine On для каждого виртуального хоста.

RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK|OPTIONS)
RewriteRule .* - [F]
NullPointer
источник