Tengo una aplicación web instalada en dos servidores. En uno de los servidores, cuando accedo a la página de inicio, aparece el error "Código de error: ERR_TOO_MANY_REDIRECTS" en el navegador, mientras que en el otro todo funciona bien. Ambos servidores ejecutan Apache 2.4.
¿Qué parte de la configuración de Apache está relacionada con las reglas de redireccionamiento? ¿Dónde debo buscar diferencias entre las dos configuraciones?
Por si acaso, aquí está el archivo 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>
Respuesta1
A menudo encuentro que un comportamiento tan divergente puede atribuirse a diferencias en la configuración. Para eso, escribí un guión (httpd-volcado-config) para aplanar httpd.conf para poder diferenciarlo y poder auditar dichas diferencias entre nodos del clúster o entre entornos (incluso a través de SSH)
Sin embargo, no comprobará los archivos .htaccess, pero aún así puede ayudar a encontrar archivos .htaccess que se pasan por alto fácilmente:
find $(httpd-dump-config | grep -i DocumentRoot | awk '{print $2}') -type f -name '.htaccess' -print
No recomiendo probar lo anterior con ssh&diff como se muestra a continuación (porque el escape lo matará)
Comparando la configuración de las dos máquinas que no es .htaccess:
diff <(httpd-dump-config) \
<(ssh webserverB.dom httpd-dump-config)
También existe la posibilidad de que se pueda emitir una redirección desde el código (como PHP enviando un encabezado de Ubicación; como a menudo está lleno de basura o escondido en muchos PHP que he visto).
Respuesta2
¿Tiene este error en todos los navegadores?
Cada vez que me encuentro con este problema es siempre un pequeño fallo en un navegador en particular o el resultado de una URL extraña.
Las reglas de reescritura normalmente son así
RewriteEngine on
RewriteCond /your/docroot/%{REQUEST_FILENAME} !-f
RewriteRule ^(.+) http://webserverB.dom/$**1
"El problema aquí es que esto solo funcionará para páginas dentro de DocumentRoot. Si bien puede agregar más condiciones (por ejemplo, para manejar también directorios de inicio, etc.), existe una variante mejor:"
RewriteEngine on
RewriteCond %{REQUEST_URI} !-U
RewriteRule ^(.+) http://webserverB.dom/$1**
"Esto utiliza la función de búsqueda anticipada de URL de mod_rewrite. El resultado es que funcionará para todo tipo de URL y es una forma segura. Pero tiene un impacto en el rendimiento del servidor web, porque por cada solicitud hay una subrequest interna más. Entonces, si su servidor web se ejecuta en una CPU potente, use esta. Si es una máquina lenta, use el primer enfoque o, mejor, un script CGI de ErrorDocument.
También puedes consultarredirección extendida.