httpd files configurar conf apache apache2 apache-config

files - restart apache



Necesidad de permitir barras diagonales en Apache (7)

Después de un poco de pruebas, y mirando el error en Apache, he llegado a la conclusión de que a pesar de las soluciones ofrecidas en diferentes foros, este es un problema no resuelto en Apache. Vea el error: https://issues.apache.org/bugzilla/show_bug.cgi?id=35256

La solución que funciona para mí es refactorizar el URI para que el elemento que puede contener las barras escapó en la sección de consulta del URI, en lugar de la ruta. Mis pruebas muestran que, cuando están allí, no se filtran por Apache, sin importar las configuraciones de AllowEncodedSlashes y AcceptPathInfo.

Entonces: http://test.com/url?http%3A%2F%2Fwww.url2.com

o: http://test.com/url?theURL=http%3A%2F%2Fwww.url2.com

en lugar de: http://test.com/url/http%3A%2F%2Fwww.url2.com

Esto significa un cambio de arquitectura para nuestro proyecto, pero parece inevitable. Espero que hayas encontrado una solución.

Actualmente estoy intentando colocar una URL dentro de una URL. Por ejemplo:

http://example.com/url/http%3A%2F%2Fwww.url2.com

Soy consciente de que tengo que codificar la URL, lo que he hecho, pero ahora recibo un error 404 del servidor en lugar de mi aplicación. Creo que mi problema radica en apache y se puede solucionar con la directiva AllowEncodedSlashes On .

Intenté poner la directiva en la parte inferior del httpd.conf sin ningún efecto, y no estoy seguro de qué hacer a continuación. ¿Lo estoy poniendo en el lugar correcto? Si es así, ¿alguien tiene alguna otra solución?


Este problema no está relacionado con Apache Bug 35256. Más bien, está relacionado con el error 46830. Los hosts virtuales no heredan la configuración AllowEncodedSlashes , y los hosts virtuales se usan en muchas configuraciones de Apache predeterminadas, como la de Ubuntu. La solución consiste en agregar la configuración AllowEncodedSlashes dentro de un contenedor <VirtualHost> ( /etc/apache2/sites-available/default en Ubuntu).

Error 35256 : %2F se decodificará en PATH_INFO (La documentación para AllowEncodedSlashes dice que no se realizará la decodificación)

Error 46830 : si AllowEncodedSlashes On está establecido en el contexto global, no es heredado por los hosts virtuales. Debe establecer explícitamente AllowEncodedSlashes On en cada contenedor <VirtalHost> .

La documentación sobre cómo se fusionan las diferentes secciones de configuración dice:

Las secciones dentro de las secciones <VirtualHost> se aplican después de las secciones correspondientes fuera de la definición del host virtual. Esto permite que los hosts virtuales anulen la configuración del servidor principal.


Perdí muchas horas en este problema también. Llego un poco tarde a la fiesta, pero parece que hay una solución ahora.

Según este hilo , hay (hay) un error en Apache, de modo que si tiene AllowEncodedSlashes On , impide el 404, pero decodifica erróneamente las barras, lo cual es incorrecto de acuerdo con el RFC.

Este comentario ofrece una solución, es decir, para usar:

AllowEncodedSlashes NoDecode


Reemplace %2F con %252F en el lado del cliente.

Esta es la forma de doble codificación de la barra diagonal.

Por lo tanto, cuando llega al servidor y se decodifica prematuramente, lo decodificará en% 2F, que es exactamente lo que desea.


Seguí encontrando esta publicación para otro problema. Déjame explicarte muy rápido.

Tenía la misma URL de estilo y también intentaba proxy.

Ejemplo: solicitudes de proxy desde /example/ a otro servidor.

/example/http:%2F%2Fwww.someurl.com/

Problema 1: Apache cree que es una url no válida

Solución: AllowEncodedSlashes On en httpd.conf

Problema 2: Apache decodifica las barras codificadas

Solución: AllowEncodedSlashes NoDecode en httpd.conf (Requiere Apache 2.3.12+)

Problema 3: mod_proxy intenta recodificar (codificar doblemente) la URL cambiando %2F a %252F (ej. /example/http:%252F%252Fwww.someurl.com/ )

Solución: en httpd.conf utilice la palabra clave nocanon para pasar la URL sin nocanon a través del proxy.

ProxyPass http://anotherserver:8080/example/ nocanon

archivo httpd.conf:

AllowEncodedSlashes NoDecode <Location /example/> ProxyPass http://anotherserver:8080/example/ nocanon </Location>

Referencia:


Tengo el mismo problema con "AllowEncodedSlashes On", y he intentado colocar la directiva en un par de lugares diferentes: apache2.conf, httpd.conf, y dentro de una sección, como un ejemplo en http://www.jampmark.com/web-scripting/5-solutions-to-url-encoded-slashes-problem-in-apache.html .

Si aún no lo hizo, puede configurar su nivel de registro para depurar (otra directiva) y ver si obtiene el error:

encontrado% 2f (codificado ''/'') en URI (decodificado = ''/ url / http: //www.url2.com''), devolviendo 404

otros errores no encontrados no proporcionan esta información en los registros. Solo otro diagnóstico ...

Buena suerte (para nosotros dos)!


a la luz de todas las molestias, opté por base64_encoding seguido de urlencoding. Funciona sin tener que perder el tiempo con la configuración del servidor apache o mirando informes de errores. También funciona sin tener que colocar la url en la sección de consulta.

$enc_url = urlencode(base64_encode($uri_string));

y para recuperarlo

$url = base64_decode(urldecode($enc_url));

http://example.com/admin/supplier_show/8/YWRtaW4vc3VwcGxpZXJz

http://example.com/admin/supplier_show/93/YWRtaW4vc3VwcGxpZXJzLzEwMA%3D%3D