1 votos

Apache codificación URI causando 404

Este es un extraño problema que estoy teniendo. Estoy usando un marco de trabajo que se llama después de que el mod_rewrite vuelve a escribir la dirección URL. Si un personaje en la URI es acentuada, como en el alfabeto latino, la solicitud no se envía nunca a mi ámbito de trabajo, sino más bien, los errores del servidor con un 404. Estoy usando una máquina con Windows, así que no estoy seguro si esto tiene algo que ver con ello o no. Mientras que NO hay caracteres acentuados en la URI, a continuación, la solicitud se envía al marco sin ningún tipo de problemas. Por favor alguien puede decirme lo que está pasando aquí y cómo resolver esto?

EDIT: Aquí hay 2 líneas de mi acceso.registro. La primera línea muestra el 404, donde el acento Å fue codificado por un servidor Apache y no fue aprobada. Cuando me cambie el Å en la URI de un inglés "a", todo funciona como se espera.

127.0.0.1 - - [20/Oct/2017:13:50:50 -0400] "GET /actor/%C3%85ker HTTP/1.1" 404 222
127.0.0.1 - - [20/Oct/2017:13:54:48 -0400] "GET /actor/Aker HTTP/1.1" 200 5701

EDITAR: Estas son las líneas en .htaccess archivo

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php?request=$1 [L,QSA]

Esto es parte de un registro de depuración consta de 2 personas a la que se muestra que, para uno de ellos, el mod_rewrite no es el reenvío de la solicitud a mi marco, sin embargo, el otro es.

Este es el que falla:

[Fri Oct 20 17:52:48.119655 2017] [rewrite:trace3] [pid 1620:tid 792] mod_rewrite.c(480): [client 127.0.0.1:52846] 127.0.0.1 - - [ansac.com/sid#2de668][rid#1fec230/initial] [perdir C:/Development/Apache24/htdocs/ansac/] add path info postfix: C:/Development/Apache24/htdocs/ansac/actor -> C:/Development/Apache24/htdocs/ansac/actor/\xc3\x85kerman, referer: http://ansac.com/
[Fri Oct 20 17:52:48.119655 2017] [rewrite:trace3] [pid 1620:tid 792] mod_rewrite.c(480): [client 127.0.0.1:52846] 127.0.0.1 - - [ansac.com/sid#2de668][rid#1fec230/initial] [perdir C:/Development/Apache24/htdocs/ansac/] strip per-dir prefix: C:/Development/Apache24/htdocs/ansac/actor/\xc3\x85kerman -> actor/\xc3\x85kerman, referer: http://ansac.com/
[Fri Oct 20 17:52:48.119655 2017] [rewrite:trace3] [pid 1620:tid 792] mod_rewrite.c(480): [client 127.0.0.1:52846] 127.0.0.1 - - [ansac.com/sid#2de668][rid#1fec230/initial] [perdir C:/Development/Apache24/htdocs/ansac/] applying pattern '^(.*)$' to uri 'actor/\xc3\x85kerman', referer: http://ansac.com/
[Fri Oct 20 17:52:48.119655 2017] [rewrite:trace1] [pid 1620:tid 792] mod_rewrite.c(480): [client 127.0.0.1:52846] 127.0.0.1 - - [ansac.com/sid#2de668][rid#1fec230/initial] [perdir C:/Development/Apache24/htdocs/ansac/] pass through C:/Development/Apache24/htdocs/ansac/actor, referer: http://ansac.com/

Extrañamente, este funciona:

[Fri Oct 20 17:56:42.415807 2017] [rewrite:trace3] [pid 1620:tid 792] mod_rewrite.c(480): [client 127.0.0.1:52856] 127.0.0.1 - - [ansac.com/sid#2de668][rid#1ff8290/initial] [perdir C:/Development/Apache24/htdocs/ansac/] add path info postfix: C:/Development/Apache24/htdocs/ansac/actor -> C:/Development/Apache24/htdocs/ansac/actor/Gonz\xc3\xa1lez
[Fri Oct 20 17:56:42.415807 2017] [rewrite:trace3] [pid 1620:tid 792] mod_rewrite.c(480): [client 127.0.0.1:52856] 127.0.0.1 - - [ansac.com/sid#2de668][rid#1ff8290/initial] [perdir C:/Development/Apache24/htdocs/ansac/] strip per-dir prefix: C:/Development/Apache24/htdocs/ansac/actor/Gonz\xc3\xa1lez -> actor/Gonz\xc3\xa1lez
[Fri Oct 20 17:56:42.415807 2017] [rewrite:trace3] [pid 1620:tid 792] mod_rewrite.c(480): [client 127.0.0.1:52856] 127.0.0.1 - - [ansac.com/sid#2de668][rid#1ff8290/initial] [perdir C:/Development/Apache24/htdocs/ansac/] applying pattern '^(.*)$' to uri 'actor/Gonz\xc3\xa1lez'
[Fri Oct 20 17:56:42.415807 2017] [rewrite:trace4] [pid 1620:tid 792] mod_rewrite.c(480): [client 127.0.0.1:52856] 127.0.0.1 - - [ansac.com/sid#2de668][rid#1ff8290/initial] [perdir C:/Development/Apache24/htdocs/ansac/] RewriteCond: input='C:/Development/Apache24/htdocs/ansac/actor' pattern='!-f' => matched
[Fri Oct 20 17:56:42.415807 2017] [rewrite:trace4] [pid 1620:tid 792] mod_rewrite.c(480): [client 127.0.0.1:52856] 127.0.0.1 - - [ansac.com/sid#2de668][rid#1ff8290/initial] [perdir C:/Development/Apache24/htdocs/ansac/] RewriteCond: input='C:/Development/Apache24/htdocs/ansac/actor' pattern='!-d' => matched
[Fri Oct 20 17:56:42.415807 2017] [rewrite:trace2] [pid 1620:tid 792] mod_rewrite.c(480): [client 127.0.0.1:52856] 127.0.0.1 - - [ansac.com/sid#2de668][rid#1ff8290/initial] [perdir C:/Development/Apache24/htdocs/ansac/] rewrite 'actor/Gonz\xc3\xa1lez' -> 'index.php?do=actor/Gonz\xc3\xa1lez'
[Fri Oct 20 17:56:42.415807 2017] [rewrite:trace3] [pid 1620:tid 792] mod_rewrite.c(480): [client 127.0.0.1:52856] 127.0.0.1 - - [ansac.com/sid#2de668][rid#1ff8290/initial] split uri=index.php?do=actor/Gonz\xc3\xa1lez -> uri=index.php, args=do=actor/Gonz\xc3\xa1lez
[Fri Oct 20 17:56:42.415807 2017] [rewrite:trace3] [pid 1620:tid 792] mod_rewrite.c(480): [client 127.0.0.1:52856] 127.0.0.1 - - [ansac.com/sid#2de668][rid#1ff8290/initial] [perdir C:/Development/Apache24/htdocs/ansac/] add per-dir prefix: index.php -> C:/Development/Apache24/htdocs/ansac/index.php
[Fri Oct 20 17:56:42.415807 2017] [rewrite:trace2] [pid 1620:tid 792] mod_rewrite.c(480): [client 127.0.0.1:52856] 127.0.0.1 - - [ansac.com/sid#2de668][rid#1ff8290/initial] [perdir C:/Development/Apache24/htdocs/ansac/] strip document_root prefix: C:/Development/Apache24/htdocs/ansac/index.php -> /index.php
[Fri Oct 20 17:56:42.415807 2017] [rewrite:trace1] [pid 1620:tid 792] mod_rewrite.c(480): [client 127.0.0.1:52856] 127.0.0.1 - - [ansac.com/sid#2de668][rid#1ff8290/initial] [perdir C:/Development/Apache24/htdocs/ansac/] internal redirect with /index.php [INTERNAL REDIRECT]
[Fri Oct 20 17:56:42.415807 2017] [rewrite:trace3] [pid 1620:tid 792] mod_rewrite.c(480): [client 127.0.0.1:52856] 127.0.0.1 - - [ansac.com/sid#2de668][rid#1ffd7c0/initial/redir#1] [perdir C:/Development/Apache24/htdocs/ansac/] strip per-dir prefix: C:/Development/Apache24/htdocs/ansac/index.php -> index.php
[Fri Oct 20 17:56:42.415807 2017] [rewrite:trace3] [pid 1620:tid 792] mod_rewrite.c(480): [client 127.0.0.1:52856] 127.0.0.1 - - [ansac.com/sid#2de668][rid#1ffd7c0/initial/redir#1] [perdir C:/Development/Apache24/htdocs/ansac/] applying pattern '^(.*)$' to uri 'index.php'
[Fri Oct 20 17:56:42.415807 2017] [rewrite:trace4] [pid 1620:tid 792] mod_rewrite.c(480): [client 127.0.0.1:52856] 127.0.0.1 - - [ansac.com/sid#2de668][rid#1ffd7c0/initial/redir#1] [perdir C:/Development/Apache24/htdocs/ansac/] RewriteCond: input='C:/Development/Apache24/htdocs/ansac/index.php' pattern='!-f' => not-matched
[Fri Oct 20 17:56:42.415807 2017] [rewrite:trace1] [pid 1620:tid 792] mod_rewrite.c(480): [client 127.0.0.1:52856] 127.0.0.1 - - [ansac.com/sid#2de668][rid#1ffd7c0/initial/redir#1] [perdir C:/Development/Apache24/htdocs/ansac/] pass through C:/Development/Apache24/htdocs/ansac/index.php

¿Por qué un trabajo y el otro no? Ambos nombres tienen acentos en ellos, sin embargo, una falla.

1voto

jl6 Puntos 395

Una hipótesis...

RewriteRule .* index.php?request=$1 [L,QSA]

Esta línea se ve como un error, ya que el $1 referencia inversa será siempre estar vacío como no hay ningún grupo capturado en la RewriteRule patrón.

El "marco" todavía puede funcionar (por el alfabeto latino), porque puede ser el análisis de la $_SERVER['REQUEST_URI'] PHP superglobal lugar (como un retroceso tal vez) - que muchos marcos. Sin embargo, $_SERVER['REQUEST_URI'] permanecerá URL codificada (por ejemplo. /actor/%C3%85ker) - así que esto probablemente debe ser la URL decodificado (por ejemplo. /actor/Åker) antes de que pueden ser enrutados a través de su marco. Este podría ser el origen del problema. Una petición como /actor/Aker, por otro lado, es el mismo si una URL codificada o no, así que esto no afectaría a las direcciones Url como esta.

Sin embargo, si su marco permite la URL solicitada para ser reemplazado con el request parámetro de URL, a continuación, considere la posibilidad de cambiar la directiva de arriba:

 RewriteRule (.*) index.php?request=$1 [L,QSA]

es decir. encierre el RewriteRule patrón en paréntesis.

Esto dará como resultado la captura de la URL-path que se pasa en la request parámetro de URL. Ahora, la importante diferencia con esta es que la URL de la ruta que el RewriteRule directiva de los partidos contra ya es URL decodificado. Así, el request parámetro de URL que ya contiene la dirección URL decodificados solicitud (aunque con menos de la barra de prefijo), por ejemplo. actor/Åker.


ACTUALIZACIÓN: Pruebe a cambiar el RewriteRule patrón de .* a [\s\S]* lugar. Por ejemplo:

 RewriteRule ([\s\S]*) index.php?request=$1 [QSA,L]

Esto es sólo un poco más amplia del patrón. Mientras . (dot) coincide con cualquier carácter (excepto el de nueva línea), [\s\S] coincide con cualquier espacio en blanco y no-caracteres de espacio en blanco (es decir. todo).

0voto

JDS Puntos 505
  1. Buscar en sus registros. ¿Cuál es la ruta de acceso del archivo que el Apache registro de error que dice que está buscando? ¿Esta ruta a este archivo existe?

  2. Esto suena como un problema de codificación de caracteres. Garantizar el carácter la codificación está configurado en Apache de forma adecuada. Por Desgracia, Me no tiene una recomendación específica para eso.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: