Como posso ativar o tratamento de todos os métodos HTTP, conforme definido na RFC 2616 no servidor da web Apache? Estes seriam:
OPTIONS
GET
HEAD
POST
PUT
DELETE
TRACE
CONNECT
Estou usando o servidor HTTP Apache, versão 2.2.22 (Ubuntu)
Aqui está o meu .htaccess
arquivo:
<Location /output>
Dav On
<LimitExcept GET HEAD OPTIONS PUT>
Allow from all
</LimitExcept>
</Location>
Aqui está a saída que recebo da execução do Telnet - Não há método 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.
Alguma idéia sobre isso?
/output
local, mas está solicitandoOPTIONS
o/
local. Os limites do método não se aplicam aos locais principais, apenas aos locais mais profundos.Respostas:
O Apache implementa todos os métodos HTTP relevantes para conteúdo estático (arquivos reais servidos diretamente pelo Apache). Para conteúdo dinâmico (scripts CGI
mod_php
, etc), o Apache não se importa com o que é o método HTTP (a menos que seja explicitamente restrito a uma<Limit>
diretiva ) e passa a solicitação para o manipulador apropriado. Seu script precisa manipular o método específico conforme pretendido, não o Apache. Até métodos não padronizados são passados para manipuladores dinâmicos sem nenhum problema.Testado com uma
ASDFG / HTTP/1.1
solicitação inválida manipulada por ummod_php
script. Nenhuma reclamação do Apache, recebidaASDFG
no$_SERVER['REQUEST_METHOD']
script do manipulador.fonte
OPTIONS
solicitação, a menos que você a proíba explicitamente<Limit OPTIONS> deny from all </Limit>
ou com um controle de acesso semelhante.Com base em http://httpd.apache.org/docs/current/mod/core.html , esses métodos podem ser modificados nos arquivos de configuração
directory
e.htaccess
usando aLimit method [method] ... > ... </Limit>
diretivaBasicamente, você deve comentar as opções abaixo, usadas para bloquear os métodos.
fonte
Provavelmente você está usando o libapache2-mod-php5filter em vez do libapache2-mod-php5.
Detalhes: apache2 e php5: módulo ou filtro
fonte
A maneira certa de corrigir isso é saber por que o Apache nega as solicitações no seu caso específico . Você pode aprender isso em logs de erros.
No meu caso,
tail -f /usr/local/apache/logs/error_log
dei o seguinte:Menciona uma regra de segurança eo arquivo que está vindo de:
/usr/local/apache/conf/modsec-imh/01_base_rules.conf
. A edição desse arquivo resolveu meu problema.fonte
O Documento PHP tem uma seção de referências para este http://php.net/manual/en/features.file-upload.put-method.php
A documentação principal do apache para a diretiva está em http://httpd.apache.org/docs/2.2/mod/mod_actions.html
fonte