Tenho um aplicativo web instalado em dois servidores. Em um dos servidores, ao acessar a página inicial recebo o erro "Código de erro: ERR_TOO_MANY_REDIRECTS" no navegador enquanto no outro tudo funciona bem. Ambos os servidores estão executando o Apache 2.4.
Qual parte da configuração do Apache está relacionada às regras de redirecionamento? Onde devo procurar diferenças entre as duas configurações?
Por precaução, aqui está o arquivo 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>
Responder1
Muitas vezes acho que esse comportamento divergente pode ser atribuído a diferenças na configuração. Para isso, escrevi um roteiro (httpd-dump-config) para nivelar o httpd.conf para que eu pudesse diferenciá-lo e auditar essas diferenças entre nós do cluster ou entre ambientes (até mesmo por SSH)
Porém, ele não verifica arquivos .htaccess, mas ainda pode ajudar a encontrar arquivos .htaccess facilmente esquecidos:
find $(httpd-dump-config | grep -i DocumentRoot | awk '{print $2}') -type f -name '.htaccess' -print
Eu não recomendo tentar o procedimento acima com ssh&diff conforme mostrado abaixo (porque a fuga irá matá-lo)
Comparando a configuração não .htaccess das duas máquinas:
diff <(httpd-dump-config) \
<(ssh webserverB.dom httpd-dump-config)
Há também a possibilidade de que um redirecionamento possa ser emitido a partir do código (como o PHP enviando um cabeçalho Location; como ele costuma estar cheio ou escondido em muitos PHP que já vi).
Responder2
Você está tendo esse erro em todos os navegadores?
Sempre que encontro esse problema, é sempre uma pequena falha em um navegador específico ou o resultado de um URL estranho.
As regras de reescrita são normalmente estas
RewriteEngine on
RewriteCond /your/docroot/%{REQUEST_FILENAME} !-f
RewriteRule ^(.+) http://webserverB.dom/$**1
"O problema aqui é que isso só funcionará para páginas dentro do DocumentRoot. Embora você possa adicionar mais condições (por exemplo, para também lidar com homedirs, etc.), há uma variante melhor:"
RewriteEngine on
RewriteCond %{REQUEST_URI} !-U
RewriteRule ^(.+) http://webserverB.dom/$1**
"Isso usa o recurso de visualização de URL do mod_rewrite. O resultado é que isso funcionará para todos os tipos de URLs e é uma forma segura. Mas causa um impacto no desempenho do servidor web, porque para cada solicitação há mais uma subsolicitação interna . Portanto, se o seu servidor web roda em uma CPU poderosa, use esta. Se for uma máquina lenta, use a primeira abordagem ou melhor, um script CGI ErrorDocument.
Você também pode pesquisarredirecionamento estendido.