apache - mod_rewrite - Cómo depurar.htaccess RewriteRule no funciona
mod_rewrite htaccess (7)
Tengo una RewriteRule
en un archivo .htaccess
que no está haciendo nada. ¿Cómo soluciono esto?
- ¿Cómo puedo verificar si Apache está leyendo y obedeciendo el archivo
.htaccess
? ¿Puedo escribir un mensaje de eco "está funcionando", si lo escribo, ¿dónde se repetirá esa línea? - Si el archivo
.htaccess
no se está utilizando, ¿cómo puedo hacer que Apache lo use? - Si se usa
.htaccess
pero miRewriteRule
todavía no está teniendo efecto, ¿qué más puedo hacer para depurar?
¿Por qué no poner algo de basura en su archivo .htaccess e intentar cargar Apache? Si apache no se inicia, sabrá que está funcionando. Elimine la basura y vuelva a cargar Apache si carga las felicitaciones que configuró .htaccess correctamente.
En general, cualquier cambio en .htaccess debe tener efectos visibles. Si no tiene efecto, revise los archivos de configuración de Apache, algo como:
<Directory ..>
...
AllowOverride None
...
</Directory>
Debería cambiarse a
AllowOverride All
Y podrá cambiar las directivas en archivos .htaccess.
Ingrese algún valor no sakjnaskljdnas
en su .htaccess
por ejemplo, foo bar
, sakjnaskljdnas
cualquier palabra clave no reconocida por htaccess y visite su URL. Si está funcionando, deberías obtener un
Error interno de servidor 500
error de servidor interno
El servidor encontró un error interno o una configuración incorrecta y no pudo completar su solicitud ....
Te sugiero que lo pongas pronto después de RewriteEngine on
.
Ya que estás en tu máquina. Supongo que tiene acceso al archivo apache .conf
.
abra el archivo .conf
y busque una línea similar a:
LoadModule rewrite_module modules/mod_rewrite.so
Si se comenta (#), elimine el comentario y reinicie apache.
Para registrar la reescritura
RewriteEngine On
RewriteLog "/path/to/rewrite.log"
RewriteLogLevel 9
Coloque las 3 líneas anteriores en su virtualhost
. reinicia el httpd.
RewriteLogLevel 9
Usar un valor alto para Level reducirá drásticamente su servidor Apache! Utilice el archivo de registro de reescritura en un nivel superior a 2 solo para la depuración. El nivel 9 registrará casi todos los detalles de reescritura.
ACTUALIZAR
Las cosas han cambiado en Apache 2.4:
DESDE Actualizar a 2.4 de 2.2
Las directivas RewriteLog y RewriteLogLevel se han eliminado. Esta funcionalidad ahora se proporciona configurando el nivel apropiado de registro para el módulo mod_rewrite usando la directiva LogLevel . Ver también la sección de registro mod_rewrite.
Para obtener más información sobre LogLevel, consulte la Directiva LogLevel
puedes lograr
RewriteLog "/path/to/rewrite.log"
de esta manera ahora
LogLevel debug rewrite_module:debug
La respuesta "Ingresar algún valor no deseado" no me gustó, mi sitio siguió cargando a pesar de la basura ingresada.
En su lugar, agregué la siguiente línea en la parte superior del archivo .htaccess:
deny from all
Esto le avisará rápidamente si .htaccess está siendo recogido o no. Si se utiliza .htaccess, los archivos en esa carpeta no se cargarán en absoluto.
Para probar las reglas de reescritura de htaccess, simplemente complete la URL a la que está aplicando las reglas, coloque el contenido de su htaccess en el área de entrada más grande y presione el botón "Probar".
Si tiene acceso al directorio de apache bin, puede usar,
httpd -M
para verificar los módulos cargados primero.
info_module (shared) isapi_module (shared) log_config_module (shared) cache_disk_module (shared) mime_module (shared) negotiation_module (shared) proxy_module (shared) proxy_ajp_module (shared) rewrite_module (shared) setenvif_module (shared) socache_shmcb_module (shared) ssl_module (shared) status_module (shared) version_module (shared) php5_module (shared)
Después de eso, las directivas simples como Options -Indexes
o deny from all
solidificarán que .htaccess está funcionando correctamente.
Tal vez un método más lógico sería crear un archivo (por ejemplo, test.html), agregar algo de contenido y luego intentar establecerlo como la página de índice:
DirectoryIndex test.html
En su mayor parte, la regla .htaccess anulará la configuración de Apache cuando trabaje en el directorio / nivel de archivo