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

Мне установили веб-приложение на двух серверах. На одном из серверов, когда я получаю доступ к домашней странице, я получаю "Код ошибки: ERR_TOO_MANY_REDIRECTS" ошибка в браузере, в то время как на другом все хорошо работает. Оба сервера выполняют апачские 2.4.

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

На всякий случай вот 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
задан 4 May 2015 в 00:54
2 ответа

Я часто нахожу, что такое расхождение в поведении может быть связано с различиями в конфигурации. Для этого я написал скрипт (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, которые я видел)

.
4
ответ дан 3 December 2019 в 17:39

У вас эта ошибка во всех браузерах?

Каждый раз, когда я сталкиваюсь с этой проблемой, это всегда либо крошечный глюк в одном конкретном браузере, либо результат wierd 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

0
ответ дан 3 December 2019 в 17:39

Теги

Похожие вопросы