comprimento máximo de url 257 caracteres para mod_rewrite?

11

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

Estou usando estas regras mod_rewrite:

RewriteBase /foo/
RewriteEngine on

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

RewriteRule ^ index.php [PT,L]

Se o comprimento da sequência 'var1-var2 ...' for maior que 257 caracteres, um erro 403 Proibido e um 404 serão retornados. No entanto, se o comprimento da string 'var1-var2 ...' tiver 257 caracteres ou menos e subsequentemente seguido de uma barra, o comprimento do URL restante poderá ter qualquer comprimento. Como alguém supera esse limite?

Daniel
fonte

Respostas:

11

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

Veja os limites do sistema de arquivos . Você verá que a maioria tem um comprimento máximo de nome de arquivo de 255 bytes. Portanto, 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 essa no arquivo .htaccess, será tarde demais para solucionar o problema. O Apache já tentou especificar o nome do arquivo longo, lançando o erro do sistema de arquivos '(36) Nome do arquivo muito longo', retornando um erro 403.

Eu vejo duas opções:

  1. Altere o formato da 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 apache e remova o REQUEST_FILENAME.
h0tw1r3
fonte
Se um arquivo .htaccess não incluir {REQUEST_FILENAME}, mas ainda estiver retornando um 403, isso ainda pode ser o problema? ( serverfault.com/questions/140852/… )
philfreo
1
Você deve mover as regras de reescrita para a configuração do apache . Essa é a única maneira de manter a funcionalidade e solucionar o problema.
H0tw1r3 23/07
3
Ao mover regras de .htaccess para a configuração do host virtual apache, você precisa alterar %{REQUEST_FILENAME}=> %{DOCUMENT_ROOT}%{REQUEST_FILENAME}e também adicionar uma barra ao início dos seus padrões de URL, por exemplo, RewriteRule ^abc ...mas não RewriteRule ^/abc .... Você conseguiu amar do mod_rewrite franqueza ...
ash108
2
A parte "Mover as regras de reescrita para a configuração do host virtual do apache" é dourada: ela realmente funciona quando implementada corretamente, ao contrário de muitas outras soluções alternativas que eu tentei.
ash108