Corrección de errores Mod Rewrite 500

Tengo un archivo .htaccess que está usando Mod_Rewrite, pero me encuentro con un problema si alguien pone basura en la URL genera un error de 500 y muestra toda la información de mi mod. Me gustaría evitar que genere el error 500 o reenviar ese error a una página diferente. Yo he tratado.

Error Document 500 /index.php 

… pero no funciona ni redirige.

Aquí está mi completo .htaccess

  Options -Indexes Options +FollowSymlinks ErrorDocument 500 /index.php RewriteEngine On RewriteRule ^BEARS bears.php?page=bears [NC,L] RewriteCond %{http_host} ^www.domian.org/login.php [NC] RewriteRule ^(.*)$ https://www.domian.org/login.php [R=301,L] RewriteCond %{http_host} ^domian.com [NC] RewriteRule ^(.*)$ http://www.domian.org/$1 [R=301,L] RewriteCond %{http_host} ^domian.org [NC] RewriteRule ^(.*)$ http://www.domian.org/$1 [R=301,L] RewriteCond %{http_host} ^www.domian.com [NC] RewriteRule ^(.*)$ http://www.domian.org/$1 [R=301,L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.+)/DB/(.+)/page/(.+)$ $1.php?DB=$2&page=$3 [L,QSA] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.+)/DB/(.+)$ $1.php?DB=$2 [L,QSA] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.+)/(.+)$ $1.php?page=$2 [L,QSA] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.+)$ $1.php?page=$1 [L,QSA] 

Además, ¿alguien sabe de dónde se genera el error 500? Sé que la carpeta de error tiene los documentos de error, pero este error dice “Además, se encontró un error de 500 Internal Server Error al tratar de usar un ErrorDocument para manejar la solicitud”, y no puedo encontrar de dónde está sacando esto.

 [Thu Sep 22 11:11:40 2011] [debug] core.c(3071): [client 74.84.118.99] redirected from r->uri = /test.html.php.php.php.php.php.php.php.php.php [Thu Sep 22 11:11:40 2011] [debug] core.c(3071): [client 74.84.118.99] redirected from r->uri = /test.html.php.php.php.php.php.php.php.php [Thu Sep 22 11:11:40 2011] [debug] core.c(3071): [client 74.84.118.99] redirected from r->uri = /test.html.php.php.php.php.php.php.php [Thu Sep 22 11:11:40 2011] [debug] core.c(3071): [client 74.84.118.99] redirected from r->uri = /test.html.php.php.php.php.php.php [Thu Sep 22 11:11:40 2011] [debug] core.c(3071): [client 74.84.118.99] redirected from r->uri = /test.html.php.php.php.php.php [Thu Sep 22 11:11:40 2011] [debug] core.c(3071): [client 74.84.118.99] redirected from r->uri = /test.html.php.php.php.php [Thu Sep 22 11:11:40 2011] [debug] core.c(3071): [client 74.84.118.99] redirected from r->uri = /test.html.php.php.php [Thu Sep 22 11:11:40 2011] [debug] core.c(3071): [client 74.84.118.99] redirected from r->uri = /test.html.php.php [Thu Sep 22 11:11:40 2011] [debug] core.c(3071): [client 74.84.118.99] redirected from r->uri = /test.html.php [Thu Sep 22 11:11:40 2011] [debug] core.c(3071): [client 74.84.118.99] redirected from r->uri = /test.html 

¿Dónde está sucediendo este ciclo? No lo veo

Para ampliar su respuesta, es más específicamente esta línea:

 RewriteRule ^(.+)$ $1.php?page=$1 [L,QSA] 

que no verifica si el nombre del archivo ya termina con PHP.

Da vueltas, agregando .php.php.php.php hasta que se alcanza el máximo (revisa apache/logs/error.log ) y luego solo sirve la página original, que está presente, por lo que parece que todo está bien.

Para solucionar esto, agregue algo como esto:

 RewriteRule ^(.*)\.php$ - [L] 

que se detiene ( [L] ) si la dirección finaliza con .php .

Pensé que pondría la solución del problema aquí en caso de que alguien se encuentre con el mismo problema.

Mi código de problema era este fragmento …

  RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.+)$ $1.php?page=$1 [L,QSA] 

Parece que una entrada de basura provocará que esto también se vuelva loco.