¿Cómo puedo habilitar el manejo de todos los métodos HTTP definidos en RFC 2616 en el servidor web Apache? Estos serían:
OPTIONS
GET
HEAD
POST
PUT
DELETE
TRACE
CONNECT
Estoy usando el servidor HTTP Apache, versión 2.2.22 (Ubuntu)
Aquí está mi .htaccess
archivo:
<Location /output>
Dav On
<LimitExcept GET HEAD OPTIONS PUT>
Allow from all
</LimitExcept>
</Location>
Aquí está el resultado que obtengo al ejecutar Telnet: no hay ningún 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.
Tiene alguna idea sobre esto?
/output
ubicación, pero estás preguntando porOPTIONS
la/
ubicación. Los límites del método no se aplican a ubicaciones principales, solo a ubicaciones más profundas.Respuestas:
Apache implementa todos los métodos HTTP relevantes para contenido estático (archivos reales servidos directamente por Apache). Para contenido dinámico (scripts CGI
mod_php
, etc.), a Apache no le importa cuál es el método HTTP (a menos que esté restringido explícitamente con una<Limit>
directiva ), y pasa la solicitud al controlador apropiado tal como está. Su secuencia de comandos debe manejar el método específico según lo previsto, no Apache. Incluso los métodos no estándar se pasan a controladores dinámicos sin ningún problema.Probado con una
ASDFG / HTTP/1.1
solicitud no válida manejada por unmod_php
script. No se queja de Apache, recibidaASDFG
en$_SERVER['REQUEST_METHOD']
el guión manipulador.fuente
OPTIONS
solicitud, a menos que lo prohíba explícitamente<Limit OPTIONS> deny from all </Limit>
o con un control de acceso similar.basado en http://httpd.apache.org/docs/current/mod/core.html , estos métodos se pueden modificar en los archivos de configuración
directory
y.htaccess
utilizando laLimit method [method] ... > ... </Limit>
directivaBásicamente, debe comentar las opciones como las siguientes que se utilizan para bloquear los métodos.
fuente
Probablemente esté usando libapache2-mod-php5filter en lugar de libapache2-mod-php5.
Detalles: apache2 y php5: módulo o filtro
fuente
La forma segura de solucionar esto es saber por qué Apache niega las solicitudes en su caso particular . Puede aprender esto de los registros de errores.
En mi caso,
tail -f /usr/local/apache/logs/error_log
di esto:Se menciona una regla de seguridad y el archivo que viene de:
/usr/local/apache/conf/modsec-imh/01_base_rules.conf
. Editar ese archivo resolvió mi problema.fuente
El documento PHP tiene una sección de referencias para este http://php.net/manual/en/features.file-upload.put-method.php
La documentación principal de apache para la directiva se encuentra en http://httpd.apache.org/docs/2.2/mod/mod_actions.html
fuente