max comprimento de url 257 caracteres para mod_rewrite?

10

Meu esquema de URL é / foo / var1-var2-var3 ... / bar

Estou usando estas regras do mod_rewrite:

RewriteBase /foo/
RewriteEngine on

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

RewriteRule ^ index.php [PT,L]

Se o comprimento da string 'var1-var2 ...' for maior que 257 caracteres, um erro 403 Forbidden e um 404 serão retornados. No entanto, se o comprimento da string 'var1-var2 ...' tiver 257 caracteres ou menos e for seguido por uma barra, a duração da URL restante poderá ser qualquer tamanho. Como se supera esse limite?

    
por Daniel 05.03.2010 / 01:14

1 resposta

11

Você está com uma limitação do sistema de arquivos subjacente.

Dê uma olhada nos Limites do sistema de arquivos . Você verá que a maioria tem um tamanho máximo de 255 bytes. Assim, quando o apache e / ou sua regra de reescrita verifica se o arquivo existe, um erro é retornado ao apache pelo sistema operacional.

Com o Apache, se você colocar regras como esta no arquivo .htaccess, é tarde demais para contornar o problema. O Apache já terá tentado declarar o nome do arquivo longo, lançando assim o erro do sistema de arquivos '(36) File name too long', retornando um erro 403.

Eu vejo duas opções:

  1. Altere o formato de URL do seu aplicativo para um máximo de 255 caracteres entre cada barra.
  2. Mova as regras de reconfiguração para a configuração do host virtual do Apache e remova o REQUEST_FILENAME.
por 11.03.2010 / 21:06