mod_rewrite: maximum number of internal redirects reached

Independence
На сайте с 29.10.2005
Offline
428
1186

Один из сайтов открывается с известной всем 500 Internal Server Error

При том, что сама страница в виде чистого HTML.

Полез в лог, а там "mod_rewrite: maximum number of internal redirects reached. Assuming configuration error. Use 'RewriteOptions MaxRedirects' to increase the limit if neccessary."

Насколько я понимаю, это из-за строчек RewriteEngine, RewriteRule, RewriteCond в файле .htaccess

Не мог бы кто-нибудь знающий разъяснить, в чем, собственно, проблема и как ее вылечить? И неужели RewriteRule дает такую большую нагрузку на сервер, что нужно выставлять лимиты?

Хотелось бы разобраться.

Дмитрий
На сайте с 23.08.2006
Offline
222
#1

Скорее всего есть правило, которое зациклилось. Давайте Ваш хтаццесс сюда

Разрабатываю и автоматизирую на php http://jonnyb.ru/
Polimer
На сайте с 01.09.2006
Offline
84
#2

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

Может возникать, к примеру, когда какая-нибудь инструкция RewriteRule составленна таким образом, что вызывает внутренний редирект при любом запросе. Бывает что в нужном месте пропущена опция [L]. Показали бы свой .htaccess

Программные решения для бизнеса. (http://frontsoft.ru/) На заказ. Дорого.
Independence
На сайте с 29.10.2005
Offline
428
#3

Да, мне тоже кажется, что дело в кривизне .htaccess

Поясню, что нужно было сделать:

Есть несколько доменов, которые привязаны к 1 папке. Домены вида mysite.com , site.co.uk, website.co.uk, 123.co.uk и пр.

Mysite.com - это как бы титульный сайт (index.html), который отдельно не описывается в htaccess (он и глючит)

Файлы для остальных доменов лежат в этой же папке и должны иметь названия вида (для них и делается htaccess):

site.html, site2.html, site3.html ...

website.html, website2.html, website3.html ...

123.html, 1231.html, 1232.html ...

Вот htaccess:

Options +Includes +FollowSymLinks -Indexes

AddHandler server-parsed .shtml

DirectoryIndex index.shtml index.htm index.php index.html

AddDefaultCharset windows-1251

CookieTracking on

CookieExpires "1 years"

RewriteEngine on

RewriteCond %{HTTP_HOST} (www\.)?([a-z0-9-]+)\.co\.uk [NC]

RewriteRule ^([a-z0-9-]+)([0-9]+)\.html$ $1$2.html [L,QSA]

RewriteRule ^(.+) %{HTTP_HOST}$1 [C]

RewriteRule ^(www\.)?([a-z0-9-]+)\.co\.uk(.*) $2.html [L,QSA]

Последние 2 строки нужны исключительно для того, чтобы титульные страницы по запросам вида www.site.co.uk, www.website.co.uk, www.123.co.uk отображались.

Polimer
На сайте с 01.09.2006
Offline
84
#4

не получается разобраться. А если выкинуть последние две строчки, как обрабатывается визит на mysite.com/? Та же ошибка? А на mysite.com/index.html разница есть?

Independence
На сайте с 29.10.2005
Offline
428
#5

Если выкинуть две последние строчки, то mysite.com и mysite.com/index.html показываются совершенно нормально.

Но при этом site.co.uk, website.co.uk, 123.co.uk показывают не свои титульные страницы site.html, website.html, 123.html, а тоже index.html (и mysite.com). Соответственно, более длинные прямые адреса вида site.co.uk/site.html, site.co.uk/site2.html и пр. показывают те, страницы, что нужно.

Если есть вопросы, могу пояснить. Если у вас есть домены, то вы можете вместо co.uk поставить любые другие расширения типа msk.ru или там info..

Polimer
На сайте с 01.09.2006
Offline
84
#6

Эх, времени мало. Попробуйте жесткий вариант:

RewriteCond %{HTTP_HOST} (www\.)?([a-z0-9-]+)\.co\.uk [NC]

RewriteRule ^([a-z0-9-]+)([0-9]+)\.html$ $1$2.html [L,QSA]

RewriteCond %{HTTP_HOST} (www\.)?([a-z0-9-]+)\.co\.uk [NC]

RewriteRule ^(.+) %{HTTP_HOST}$1 [C]

RewriteRule ^(www\.)?([a-z0-9-]+)\.co\.uk(.*) $2.html [L,QSA]

Independence
На сайте с 29.10.2005
Offline
428
#7

Я с утра вставил в середину

RewriteCond %{HTTP_HOST} (www\.)?([a-z0-9-]+)\.co\.uk [NC]

и вроде работает.

Посмотрелс сейчас. И у вас точно также. Спасибо.

Думал-думал. И мысль пришла простая: RewriteRule не ловит, что это не домен co.uk (опция [C] фиксирует предыдущую строку), стало быть, поэтому и нужно опять прописать тот же самый RewriteCond, чтобы отделить нужные домены от ненужных.

А почему вы считаете этот вариант жестким? И насколько это будет влиять на скорость загрузки страниц?

Polimer
На сайте с 01.09.2006
Offline
84
#8

жесткий - потому что условие повторяющееся, немножко по быдлокодеровски, не каноническая запись. В прочем, на скорось влиять не должно. Погляжу, может вспомню, как в таком случае, первое условие правильно привязать ко всем последующим инструкциям.

Рад, что так сработало.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий