A solicitação excedeu o limite de 10

1

Meus registros estão cheios de

[Tue Jan 11 10:20:45 2011] [error] [client 99.162.115.123] Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace., referer: https://www.domain.com/vehicles/Chevrolet/Uplander/2006

O problema é que quando eu habilito LogLevel debug , recebemos registros de erros ENORMES porque todo o nosso tráfego é SSL. Pelo que posso dizer, o arquivo não registra mais esses erros, ou isso é tão oculto em logs SSL que não consigo encontrá-los.

Aqui está o meu .htaccess

Options -indexes
RewriteEngine On

RewriteRule ^battery/([^/]+)$ /browser/product?sku=BATTERY+$1&type=battery
RewriteRule ^vehicles/([^/]+)/([^/]+)/([^/]+)/product([0-9]+)$ /browser/index.php?make=$1&model=$2&id=$3&%{QUERY_STRING} [L,NC]

RewriteRule ^vehicles/([^/]+)/([^/]+)/([^/]+)/([0-9]+)$ /browser/product.php?make=$1&model=$2&year=$3&id=$4&%{QUERY_STRING} [L,NC]

RewriteRule ^vehicles/([^/]+)/([^/]+)/([^/]+)$ /store/product/list.php?make=$1&model=$2&year=$3&%{QUERY_STRING} [L,NC]
RewriteRule ^vehicles/([^/]+)/([^/]+)$ /vehicle/make/model/year/list.php?make=$1&model=$2&%{QUERY_STRING} [L,NC]
RewriteRule ^vehicles/([^/]+)$ /vehicle/make/model/list.php?make=$1&%{QUERY_STRING} [L,NC]
    
por Webnet 11.01.2011 / 16:29

3 respostas

1

Primeiro de tudo: nunca teste em ambiente de produção coisas como esta. Instale um servidor de teste e faça uma solicitação HTTP lá e procure o log. Você deve ser capaz de identificar facilmente informações específicas para essa solicitação.

Estes dados de depuração são muito úteis na solução de problemas relacionados aos loops de resolução do mod_rewrite. Basicamente, ele registra todas as etapas e imprime a resolução.

RewriteRule ^vehicles/([^/]+)/([^/]+)/([^/]+)$ /store/product/list.php?make=$1&model=$2&year=$3&%{QUERY_STRING} [L,NC]

Esta é provavelmente a regra que você deseja para este caso. Em vez disso, a análise é interrompida para a segunda regra:

RewriteRule ^battery/([^/]+)$ /browser/product?sku=BATTERY+$1&type=battery
RewriteRule ^vehicles/([^/]+)/([^/]+)/([^/]+)/product([0-9]+)$ /browser/index.php?make=$1&model=$2&id=$3&%{QUERY_STRING} [L,NC]

Desde que tenha [L], última entrada. A substituição vai parar por aí. RewriteRules não se importa se o URL não corresponde.

Em vez disso, use RewriteConds para fazer a correspondência. Se eles corresponderem, a regra será usada e, caso contrário, a execução continuará após a regra.

Então, algo como

RewriteCond %{REQUEST_URI} ^vehicles/([^/]+)/([^/]+)/([^/]+)$
RewriteRule ^vehicles/([^/]+)/([^/]+)/([^/]+)$ /store/product/list.php?make=$1&model=$2&year=$3&%{QUERY_STRING} [L,NC]

Você também pode usar parâmetros definidos em RewriteCond, se quiser regras mais limpas, com% 1.

    
por 19.01.2011 / 10:37
0

Você poderia tentar sem essa linha?

RewriteRule ^vehicles/([^/]+)/([^/]+)/([^/]+)/product([0-9]+)$ /browser/index.php?make=$1&model=$2&id=$3&%{QUERY_STRING} [L,NC]

Talvez se confunda com o parêntese extra no produto (é apenas um palpite)

    
por 18.01.2011 / 20:29
0

Com base nas suas regras de regravação, a que corresponde ao seu URL é:

RewriteRule ^vehicles/([^/]+)/([^/]+)/([^/]+)$ /store/product/list.php?make=$1&model=$2&year=$3&%{QUERY_STRING} [L,NC]  

Isso é reescrito como:

/store/product/list.php?make=Chevrolet&model=Uplander&year=2006&

Como Larsks e outros apontaram, você deve:

Enable logging of rewrite rules via RewriteLog and RewriteLogLevel. This should help you track down the problem. – larsks Jan 11 at 16:50

Dessa forma, você verá o que está acontecendo e poderá postar aqui os registros para ter mais ajuda.

Em seguida, esteja ciente de que o código mod_rewrite é executado para cada solicitação HTTP que acessa um arquivo dentro ou abaixo do diretório onde o código reside, portanto, isso pode ser a raiz do problema.

Você pode usar o seguinte código, que testa se a URL não termina em .php e, se não, irá pular as próximas 6 RewriteRules.

RewriteRule !\.php$ - [S=6]
RewriteRule ^battery/([^/]+)$ /browser/product?sku=BATTERY+$1&type=battery
RewriteRule ^vehicles/([^/]+)/([^/]+)/([^/]+)/product([0-9]+)$ /browser/index.php?make=$1&model=$2&id=$3&%{QUERY_STRING} [L,NC]  
RewriteRule ^vehicles/([^/]+)/([^/]+)/([^/]+)/([0-9]+)$ /browser/product.php?make=$1&model=$2&year=$3&id=$4&%{QUERY_STRING} [L,NC]
RewriteRule ^vehicles/([^/]+)/([^/]+)/([^/]+)$ /store/product/list.php?make=$1&model=$2&year=$3&%{QUERY_STRING} [L,NC]
RewriteRule ^vehicles/([^/]+)/([^/]+)$ /vehicle/make/model/year/list.php?make=$1&model=$2&%{QUERY_STRING} [L,NC]
RewriteRule ^vehicles/([^/]+)$ /vehicle/make/model/list.php?make=$1&%{QUERY_STRING} [L,NC]

Espero que ajude

    
por 24.01.2011 / 11:07