htaccess loop de redirecionamento apenas em um dos dois servidores

1

Eu tenho um aplicativo da web instalado em dois servidores. Em um dos servidores, quando estou acessando a página inicial, recebo o erro "Error code: 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?

Apenas no caso, 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>
    
por sica07 03.05.2015 / 23:16

2 respostas

4

Muitas vezes, acho que esse comportamento divergente pode ser atribuído a diferenças na configuração. Para isso, eu escrevi um script ( link ) para achatar o httpd.conf para que eu pudesse diff-lo para que eu pudesse fazer auditoria para tais diferenças entre os nós do cluster ou entre os ambientes (mesmo sobre SSH)

No entanto, ele não verificará os arquivos .htaccess, mas ainda pode ajudar a localizar facilmente os arquivos .htaccess:

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

Eu não recomendo tentar o acima com ssh & diff como mostrado abaixo (porque o escape vai te matar)

Comparando a configuração de duas máquinas que não são .htaccess:

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

Existe também a possibilidade de que um redirecionamento possa ser emitido a partir do código (como o PHP enviando um cabeçalho Location, tal como muitas vezes cheio de lixo ou de outra forma escondido em muitos PHP que eu vi).

    
por 13.05.2015 / 13:11
0

Você está tendo esse erro em todos os navegadores?

Sempre que encontro este problema, é sempre um pequeno erro num navegador em particular ou um resultado de um URL estranho.

As regras de reescrita normalmente são 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 look-ahead de URL do mod_rewrite. O resultado é que isso funcionará para todos os tipos de URLs e é uma maneira segura. Mas afeta o desempenho do servidor, porque para cada solicitação existe mais uma sub-requisição interna. Portanto, se o seu servidor Web for executado em uma CPU poderosa, use este. Se for uma máquina lenta, use a primeira abordagem ou melhor um script CGI ErrorDocument. "

Você também pode pesquisar redirecionamento estendido .

link

    
por 11.05.2015 / 23:58