longitud máxima de url 257 caracteres para mod_rewrite?

11

Mi esquema de URL es /foo/var1-var2-var3.../bar

Estoy usando estas reglas mod_rewrite:

RewriteBase /foo/
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^ index.php [PT,L]

Si la longitud de la cadena 'var1-var2 ...' es mayor que 257 caracteres, se produce un error 403 Prohibido y se devuelve un 404. Sin embargo, si la longitud de la cadena 'var1-var2 ...' es de 257 caracteres o menos y, posteriormente, seguida de una barra diagonal, la longitud de la URL restante puede ser de cualquier longitud. ¿Cómo se supera este límite?

Daniel
fuente

Respuestas:

11

Se encuentra con una limitación del sistema de archivos subyacente.

Echa un vistazo a los límites del sistema de archivos . Verá que la mayoría tiene una longitud máxima de nombre de archivo de 255 bytes. Por lo tanto, cuando apache y / o su regla de reescritura comprueba si el archivo existe, el sistema operativo devuelve un error a apache.

Con Apache, si coloca reglas como esta en el archivo .htaccess, es demasiado tarde para solucionar el problema. Apache ya habrá intentado generar el nombre de archivo largo, arrojando así el error del sistema de archivos '(36) Nombre de archivo demasiado largo', devolviendo un error 403.

Veo dos opciones:

  1. Cambie el formato de URL de su aplicación a un máximo de 255 caracteres entre cada barra.
  2. Mueva las reglas de reescritura a la configuración de host virtual de apache y elimine REQUEST_FILENAME
h0tw1r3
fuente
Si un archivo .htaccess no incluye {REQUEST_FILENAME}, pero sigue devolviendo un 403, ¿podría ser este el problema? ( serverfault.com/questions/140852/… )
philfreo
1
Debe mover las reglas de reescritura a la configuración de apache . Esta es la única forma de conservar la funcionalidad y solucionar el problema.
h0tw1r3
3
Al mover reglas de .htaccess a la configuración de host virtual de apache, debe cambiar %{REQUEST_FILENAME}=> %{DOCUMENT_ROOT}%{REQUEST_FILENAME}y también agregar una barra diagonal al comienzo de sus patrones de URL, por ejemplo, no RewriteRule ^abc ...pero RewriteRule ^/abc .... Tienes que amar la sencillez del mod_rewrite ...
ash108
2
La parte "Mover las reglas de reescritura a la configuración de host virtual de apache" es dorada: en realidad funciona cuando se implementa correctamente, a diferencia de muchas otras soluciones que he probado.
ash108