Назад | Перейти на главную страницу

Запрос превысил лимит в 10

Мои журналы полны

[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

Проблема в том, когда я включаю LogLevel debug мы получаем ОГРОМНЫЕ журналы ошибок, потому что весь наш трафик - это SSL. Насколько я могу судить, файл больше не записывает эти ошибки, либо он так похоронен в журналах SSL, что я просто не могу их найти.

Вот мой .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]

Прежде всего: никогда не тестируйте такие вещи в производственной среде. Установите тестовый сервер и выполните там один HTTP-запрос, а затем посмотрите журнал. Вы должны легко идентифицировать вещи, относящиеся к этому запросу.

Эти отладочные данные очень полезны при решении проблем, связанных с циклами разрешения mod_rewrite. По сути, он регистрирует каждый выполняемый шаг и печатает разрешение.

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

Скорее всего, это правило, которое вы хотите для этого случая. Вместо того, чтобы получить эффект, синтаксический анализ останавливается на втором правиле:

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]

Поскольку у него есть [L], последняя запись. На этом замена и остановится. RewriteRules не заботится о несоответствии URL.

Вместо этого используйте RewriteConds сделать сопоставление. Если они совпадают, будет использоваться правило, а если нет, выполнение продолжится после правила.

Так что-то вроде

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

Вы также можете использовать параметры, определенные в RewriteCond, если вам нужны более чистые правила, с% 1.

Не могли бы вы попробовать без этой строчки?

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

Может быть, его перепутали с лишними скобками в продукте (это всего лишь предположение)

В соответствии с вашими правилами перезаписи URL-адрес соответствует следующему:

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

Это переписывается как:

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

Как указали ларск и другие, на этом этапе вам следует:

Включите ведение журнала правил перезаписи через RewriteLog и RewriteLogLevel. Это должно помочь вам отследить проблему. - larsks 11 января в 16:50

Таким образом вы увидите, что происходит, и сможете разместить здесь журналы, чтобы получить дополнительную помощь.

Затем имейте в виду, что код mod_rewrite выполняется для каждого HTTP-запроса, который обращается к файлу в или ниже каталога, где находится код, так что это может быть корнем вашей проблемы.

Вы можете использовать следующий код, который проверяет, не заканчивается ли URL-адрес на .php, и если это не так, следующие 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]

Надеюсь, поможет