Как я могу включить обработку всех методов HTTP, как определено в RFC 2616 на веб-сервере Apache? Это будет:
OPTIONS
GET
HEAD
POST
PUT
DELETE
TRACE
CONNECT
Я использую Apache HTTP Server, версия 2.2.22 (Ubuntu)
Вот мой .htaccess
файл:
<Location /output>
Dav On
<LimitExcept GET HEAD OPTIONS PUT>
Allow from all
</LimitExcept>
</Location>
Вот вывод, который я получаю при запуске Telnet - Нет метода PUT:
Escape character is '^]'.
OPTIONS / HTTP/1.0
HTTP/1.1 200 OK
Date: Tue, 09 Oct 2012 06:56:42 GMT
Server: Apache/2.2.22 (Ubuntu)
Allow: GET,HEAD,POST,OPTIONS
Vary: Accept-Encoding
Content-Length: 0
Connection: close
Content-Type: text/html
Connection closed by foreign host.
Есть мысли по этому поводу?
/output
месте, но вы проситеOPTIONS
на/
месте. Ограничения метода не применяются к родительским местоположениям, только к более глубоким местоположениям.Ответы:
Apache реализует все соответствующие методы HTTP для статического содержимого (реальные файлы, обслуживаемые непосредственно Apache). Для динамического содержимого (сценарии CGI
mod_php
и т. Д.) Apache не заботится о том, что представляет собой метод HTTP (если он явно не ограничен<Limit>
директивой ), и передает запрос соответствующему обработчику как есть. Ваш сценарий должен обрабатывать определенный метод, как предполагалось, а не Apache. Даже нестандартные методы передаются динамическим обработчикам без проблем.Протестировано с неверным
ASDFG / HTTP/1.1
запросом, обработаннымmod_php
скриптом. Нет жалобы от Apache, получилASDFG
в$_SERVER['REQUEST_METHOD']
в сценарии обработчика.источник
OPTIONS
запрос, если вы явно не запретите его с помощью<Limit OPTIONS> deny from all </Limit>
или подобного контроля доступа.на основе http://httpd.apache.org/docs/current/mod/core.html эти методы можно изменить в файлах конфигурации
directory
и,.htaccess
используяLimit method [method] ... > ... </Limit>
директивуВ основном вы должны закомментировать параметры, подобные тем, которые приведены ниже, которые используются для блокировки методов.
источник
Возможно, вы используете libapache2-mod-php5filter вместо libapache2-mod-php5.
Детали: apache2 и php5: модуль или фильтр
источник
Верный способ исправить это - узнать, почему Apache отклоняет запросы в вашем конкретном случае . Вы можете узнать это из журналов ошибок.
В моем случае
tail -f /usr/local/apache/logs/error_log
дал это:Он упоминает правила безопасности и файл он приходит из:
/usr/local/apache/conf/modsec-imh/01_base_rules.conf
. Редактирование этого файла решило мою проблему.источник
Документ PHP имеет раздел ссылок для этого http://php.net/manual/en/features.file-upload.put-method.php
Основная документация Apache для директивы находится по адресу http://httpd.apache.org/docs/2.2/mod/mod_actions.html.
источник