Мои журналы полны
[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]
Надеюсь, поможет