2012-02-10 11 views
103

Tengo un RewriteRule en un archivo .htaccess que no está haciendo nada. ¿Cómo soluciono esto?Cómo depurar .htaccess RewriteRule no funciona

  • ¿Cómo puedo verificar si el archivo .htaccess incluso está siendo leído y obedecido por Apache? ¿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 está usando .htaccess pero mi RewriteRule todavía no está teniendo efecto, ¿qué más puedo hacer para depurar?

Respuesta

134

Ingrese algún valor no deseado en su .htaccess p. foo bar, sakjnaskljdnas cualquier palabra clave no reconocida por htaccess y visite su URL. Si está funcionando, usted debe obtener un error interno del servidor

Error interno del servidor

El servidor encontró un error interno o mala y no pudo completar su solicitud ....

Le sugiero que lo ponga pronto después de RewriteEngine on.


Dado que está en su 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 y reiniciar Apache.


Para conectarse a reescribir

RewriteEngine On 
RewriteLog "/path/to/rewrite.log" 
RewriteLogLevel 9 

puso el 3 líneas de arriba en su virtualhost. reinicia el httpd.

RewriteLogLevel 9 ¡El uso de 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.


ACTUALIZACIÓN

Las cosas han cambiado en Apache 2.4:

DE Upgrading to 2.4 from 2.2

El RewriteLog y RewriteLogLevel directivas 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 más información sobre Loglevel Usen LogLevel Directive

que puede lograr

RewriteLog "/path/to/rewrite.log" 

de esta manera ahora

LogLevel debug rewrite_module:debug 
+0

Bien, entonces el problema es que estoy intentando agregar una nueva escritura al archivo .htaccess y, por alguna razón, no la estoy usando. – macha

+0

@macha pruebe el método anterior. Si obtiene un error interno del servidor, eso significa que mod_rewrite (.htaccess) está habilitado. ¿Estás en un host compartido? – ThinkingMonkey

+0

No, estoy trabajando en mi servidor local, ¿tiene idea de cuándo se carga el archivo .htaccess? Pensé que apache leería los primeros archivos – macha

0

¿Por qué no poner algo de basura en su archivo .htaccess y tratar de volver a 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.

+6

No creo Apache no se podrá iniciar o ejecutar si hay una mala .htaccess, dado que no comprueba .htaccess hasta que haya una solicitud de página. – Andrew

5

Tal vez un método más lógico sería crear un archivo (por ejemplo test.html), agregue un poco de contenido y luego intente configurarlo como la página de índice:

DirectoryIndex test.html 

En su mayor parte, la regla .htaccess anulará la configuración de Apache, donde trabaja en el nivel de directorio/archivo

31

en general, cualquier cambio en el .htaccess debe tener efectos visibles. Si no tiene efecto, revisar sus archivos de configuración de Apache, algo así como:

<Directory ..> 
    ... 
    AllowOverride None 
    ... 
</Directory> 

se debe cambiar a

AllowOverride All 

Y usted será capaz de cambiar directivas en los archivos .htaccess.

+0

gracias. Encontré la sección relevante en el archivo apache2.conf principal para el directorio tree/var/www –

42

La respuesta "Ingrese un valor no deseado" no me convenció, mi sitio siguió cargando a pesar de la basura ingresada.

En lugar de eso añade la siguiente línea al principio del archivo .htaccess:

deny from all 

Esto le permitirá saber si rápidamente .htaccess está siendo recogido o no. Si se utiliza .htaccess, los archivos en esa carpeta no se cargarán en absoluto.

+1

Esta es la prueba más simple si no te molesta trabajar durante unos segundos mientras verificas. – Mordred

+0

Sí, me tomó alrededor de un segundo verificar que el sitio en el que estaba trabajando no utilizaba archivos .htaccess. – bonh

+0

Gracias, funciona como un encanto :) me salvó un poco de depuración de tiempo! –

3

Si usted tiene acceso a directorio bin de Apache puede utilizar,

httpd -M para comprobar los módulos cargados en primer lugar.

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 que las directivas simples como Options -Indexes o deny from all solidificará que .htaccess están funcionando correctamente.

0

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".

http://htaccess.mwl.be/

Cuestiones relacionadas