htaccess перенаправление цикл только на одном из двух серверов

htaccess перенаправление цикл только на одном из двух серверов

У меня установлено веб-приложение на двух серверах. На одном из серверов при доступе к домашней странице в браузере появляется ошибка "Error code: ERR_TOO_MANY_REDIRECTS", а на другом все работает нормально. На обоих серверах работает Apache 2.4.

Какая часть конфигурации apache связана с правилами перенаправления? Где искать различия между двумя конфигурациями?

На всякий случай вот файл htaccess:

<IfModule mod_rewrite.c>
  Options +FollowSymLinks
  RewriteEngine On

  # Get rid of index.php
  RewriteCond %{REQUEST_URI} /index\.php
  RewriteRule (.*) index.php?rewrite=2 [L,QSA]

  # Rewrite all directory-looking urls
  RewriteCond %{REQUEST_URI} /index.php/$
  RewriteRule (.*) index.php?rewrite=1 [L,QSA]

  # Try to route missing files
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} public\/ [OR]
  RewriteCond %{REQUEST_FILENAME} \.(jpg|gif|png|ico|flv|htm|html|php|css|js)$
  RewriteRule . - [L]

  # If the file doesn't exist, rewrite to index
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)$ index.php?rewrite=1 [L,QSA]

</IfModule>

# sends requests /index.php/path/to/module/ to "index.php"
# AcceptPathInfo On

# @todo This may not be effective in some cases
FileETag Size

<IfModule mod_deflate.c>
  AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css application/x-javascript application/javascript
</IfModule>

решение1

Я часто нахожу, что такое разное поведение можно объяснить различиями в конфигурации. Для этого я написал скрипт (httpd-dump-config) для выравнивания httpd.conf, чтобы я мог сравнивать его и проводить аудит на предмет таких различий между узлами кластера или между средами (даже через SSH)

Хотя он не проверяет файлы .htaccess, но все равно может помочь найти легко упускаемые из виду файлы .htaccess:

find $(httpd-dump-config | grep -i DocumentRoot | awk '{print $2}') -type f -name '.htaccess' -print

Я не рекомендую пробовать вышеописанное с ssh&diff, как показано ниже (потому что экранирование вас убьет)

Сравниваем конфигурацию двух машин без .htaccess:

diff <(httpd-dump-config) \
     <(ssh webserverB.dom httpd-dump-config)

Также существует вероятность, что перенаправление может быть выполнено из кода (например, PHP отправляет заголовок Location; такой заголовок часто встречается или иным образом спрятан во многих PHP-кодах, которые я видел).

решение2

Эта ошибка возникает во всех браузерах?

Каждый раз, когда я сталкиваюсь с этой проблемой, это либо небольшой сбой в одном конкретном браузере, либо результат странного URL-адреса.


Правила переписывания обычно такие

RewriteEngine on
RewriteCond   /your/docroot/%{REQUEST_FILENAME} !-f
RewriteRule   ^(.+)                             http://webserverB.dom/$**1

«Проблема здесь в том, что это будет работать только для страниц внутри DocumentRoot. Хотя вы можете добавить больше условий (например, чтобы также обрабатывать домашние каталоги и т. д.), есть лучший вариант:»

RewriteEngine on
RewriteCond   %{REQUEST_URI} !-U
RewriteRule   ^(.+)          http://webserverB.dom/$1**

«Это использует функцию опережающего просмотра URL mod_rewrite. В результате это будет работать для всех типов URL и является безопасным способом. Но это влияет на производительность веб-сервера, поскольку для каждого запроса есть еще один внутренний подзапрос. Поэтому, если ваш веб-сервер работает на мощном процессоре, используйте этот. Если это медленная машина, используйте первый подход или лучше CGI-скрипт ErrorDocument».

Вы также можете посмотретьрасширенное перенаправление.

http://httpd.apache.org/docs/2.0/misc/rewriteguide.html

Связанный контент