Jak mogę włączyć obsługę wszystkich metod HTTP zdefiniowanych w RFC 2616 na serwerze WWW Apache? Byłyby to:
OPTIONS
GET
HEAD
POST
PUT
DELETE
TRACE
CONNECT
Korzystam z serwera Apache HTTP Server, wersja 2.2.22 (Ubuntu)
Oto mój .htaccess
plik:
<Location /output>
Dav On
<LimitExcept GET HEAD OPTIONS PUT>
Allow from all
</LimitExcept>
</Location>
Oto wynik, który otrzymuję po uruchomieniu Telnet - nie ma metody 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.
Masz jakieś przemyślenia na ten temat?
/output
miejscu, ale prosiszOPTIONS
na/
miejscu. Limity metod nie dotyczą lokalizacji nadrzędnych, a tylko głębszych.Odpowiedzi:
Apache implementuje wszystkie odpowiednie metody HTTP dla zawartości statycznej (rzeczywiste pliki obsługiwane bezpośrednio przez Apache). W przypadku zawartości dynamicznej (skrypty CGI
mod_php
itp.) Apache nie dba o to, czym jest metoda HTTP (chyba że jest to wyraźnie ograniczone przez<Limit>
dyrektywę ) i przekazuje żądanie do odpowiedniego modułu obsługi w takiej postaci, w jakiej jest. Twój skrypt musi obsługiwać określoną metodę zgodnie z przeznaczeniem, a nie Apache. Nawet niestandardowe metody są bez problemu przekazywane do dynamicznych programów obsługi.Przetestowano z niepoprawnym
ASDFG / HTTP/1.1
żądaniem obsługiwanym przezmod_php
skrypt. Brak skargi od Apache, otrzymanejASDFG
w$_SERVER['REQUEST_METHOD']
skrypcie obsługi.źródło
OPTIONS
żądania, chyba że wyraźnie zabraniasz go<Limit OPTIONS> deny from all </Limit>
lub podobnej kontroli dostępu.w oparciu o http://httpd.apache.org/docs/current/mod/core.html metody te można modyfikować w plikach konfiguracyjnych
directory
i.htaccess
przy użyciuLimit method [method] ... > ... </Limit>
dyrektywyZasadniczo musisz skomentować opcje takie jak te poniżej, które służą do blokowania metod.
źródło
Prawdopodobnie używasz filtra libapache2-mod-php5 zamiast libapache2-mod-php5.
Szczegóły: apache2 i php5: moduł lub filtr
źródło
Pewnym sposobem na rozwiązanie tego jest ustalenie, dlaczego Apache odrzuca żądania w konkretnym przypadku . Możesz się tego nauczyć z dzienników błędów.
W moim przypadku
tail -f /usr/local/apache/logs/error_log
dał to:Wymienia reguły zabezpieczeń, a plik to przychodzi z:
/usr/local/apache/conf/modsec-imh/01_base_rules.conf
. Edycja tego pliku rozwiązała mój problem.źródło
Dokument PHP zawiera sekcję odnośników do tego http://php.net/manual/en/features.file-upload.put-method.php
Podstawowa dokumentacja apache dla dyrektywy znajduje się na stronie http://httpd.apache.org/docs/2.2/mod/mod_actions.html
źródło