URLs reconfigurados com comprimento de parâmetro 255 não funcionam

12

Estou usando mod_rewrite para reescrever URLs assim:

http://example.com/1,2,3,4/foo/

Ao fazer isso no .htaccess:

RewriteEngine On
RewriteRule ^([\d,]+)/foo/$ /foo.php?id=$1 [L,QSA]

Funciona bem, exceto quando "1,2,3,4" se transforma em uma string com mais de 255 caracteres, o Apache retorna um "403 Forbidden".

Não há problema em visitar foo.php?id=1,2,3,4 diretamente, mesmo com uma string de ID muito longa, mas isso não é uma opção para mim.

Existe algum Apache ou outra configuração que eu deveria ajustar?

UPDATE : Eu mudei o RewriteLog com o RewriteLogLevel 9. Com uma string de id curto, eu recebo várias linhas no meu arquivo de log. Mas quando a string id é maior que 255 caracteres, nothing é registrado (parece que o mod_rewrite não está nem sendo executado?).

Se você acha essa pergunta interessante / útil, faça o favor de protegê-la.

    
por philfreo 11.05.2010 / 23:39

4 respostas

8

Você acha que está com uma limitação do sistema de arquivos?

Pode ser que o comprimento máximo do nome do arquivo seja de 255 bytes e, quando o apache ou a regra mod_rewrite verificarem se o arquivo existe, um erro é retornado ao apache pelo sistema operacional.

Se você colocar alguma regra em seu arquivo .htaccess, é tarde demais para contornar o problema. O Apache já terá tentado declarar o nome do arquivo e lançar o erro do sistema de arquivos '(36) File name too long', retornando um erro 403.

Talvez você possa alterar o padrão de URL no seu aplicativo. para um máximo de 255 caracteres de barra para barra.

EDIT: procure aqui para obter informações detalhadas. responder a esta questão. Eu peguei o meu emprestado de lá.

    
por 20.05.2010 / 14:38
2

Há uma pergunta semelhante sobre esse limite aqui :

You may be running into a limitation of the underlying file system

Não sei se você está usando REQUEST_FILENAME em algum lugar da sua configuração .htaccess, portanto, não sei se a solução fornecida funcionará.

    
por 16.05.2010 / 21:47
0

Definitivamente, uma questão interessante. Você roda o mod_security e, em caso afirmativo, tentou sem ele? Talvez simplesmente não goste de nomes longos de caminhos ou nomes longos de caminhos com vírgulas não codificadas neles? ^^

Embora instintivamente pareça mais um limite no caminho do URL ou pelo menos segmentos individuais dele ou a interpretação do sistema de arquivos subjacente como GmonC escreveu. Isso também explica por que o URL regular com a parte longa na string de consulta funciona bem.

Acho que o ASP.NET antigo costumava ter um limite de caminho de solicitação de ~ 260 caracteres ou algo assim.

    
por 17.05.2010 / 19:41
0

Você está disposto a mudar os servidores http? Considere o nginx em vez do apache.

Use o link

    
por 19.05.2010 / 04:46