loop de redirecionamento htaccess apenas em um dos dois servidores

loop de redirecionamento htaccess apenas em um dos dois servidores

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.

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

informação relacionada