Come eseguire il debug di .htaccess RewriteRule non funziona


115

Ho un RewriteRulein un .htaccessfile che non sta facendo nulla. Come risolvo questo problema?

  • Come posso verificare se il .htaccessfile viene letto e rispettato da Apache? Posso scrivere un messaggio di eco "sta funzionando", se lo scrivo, dove verrebbe ripetuta quella riga?
  • Se il .htaccessfile non viene utilizzato, come posso fare in modo che Apache lo utilizzi?
  • Se .htaccessè in uso ma il mio RewriteRuleancora non ha effetto, cosa posso fare di più per eseguire il debug?

Risposte:


144

Inserisci un valore spazzatura nel tuo , .htaccess ad esempio foo bar, sakjnaskljdnas qualsiasi parola chiave non riconosciuta da htaccess e visita il tuo URL. Se funziona, dovresti ottenere un file

500 Errore interno del server

Errore interno del server

Il server ha riscontrato un errore interno o un'errata configurazione e non è stato in grado di completare la tua richiesta ....

Ti consiglio di metterlo subito dopo RewriteEngine on.


Dato che sei sulla tua macchina. Presumo che tu abbia accesso al .conffile apache .

apri il .conffile e cerca una riga simile a:

LoadModule rewrite_module modules/mod_rewrite.so

Se è commentato (#), decommenta e riavvia apache.


Per registrare la riscrittura

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

Metti le 3 linee sopra nel tuo file virtualhost. riavvia il file httpd.

RewriteLogLevel 9L'uso di un valore alto per Level rallenterà drasticamente il tuo server Apache! Usa il file di registro di riscrittura a un livello maggiore di 2 solo per il debug! Il livello 9 registrerà quasi tutti i dettagli della riscrittura.


AGGIORNARE

Le cose sono cambiate in Apache 2.4:

FROM Aggiornamento a 2.4 da 2.2

Le direttive RewriteLog e RewriteLogLevel sono state rimosse. Questa funzionalità viene ora fornita configurando il livello di registrazione appropriato per il modulo mod_rewrite utilizzando la direttiva LogLevel . Vedi anche la sezione di registrazione mod_rewrite.

Per ulteriori informazioni su LogLevel, fare riferimento alla Direttiva LogLevel

puoi realizzare

RewriteLog "/path/to/rewrite.log"

in questo modo adesso

LogLevel debug rewrite_module:debug

Ok, quindi il problema è che sto cercando di aggiungere una riscrittura al file .htaccess e per qualche motivo non lo sto usando.
macha

@macha prova il metodo sopra. Se ricevi un errore interno del server, significa che mod_rewrite (.htaccess) è abilitato. Sei su un host condiviso?
ThinkingMonkey

No sto lavorando sul mio localhost, hai un'idea di quando viene caricato il file .htaccess? Pensavo che Apache l'avrebbe letto per primo
macha

I file @macha .htaccess non vengono mai caricati. Sono accessibili (se presenti) da apache quando si tenta di accedere a una pagina presente in quella cartella.
ThinkingMonkey

ok la mia domanda era, se qualcuno richiede una pagina web, apache va direttamente agli script lato server o cerca il file .htaccess in quella cartella e poi procede ??
macha

52

La risposta "Inserisci un valore spazzatura" non ha funzionato per me, il mio sito continuava a caricarsi nonostante la spazzatura inserita.

Invece ho aggiunto la seguente riga all'inizio del file .htaccess:

deny from all

Questo ti farà sapere rapidamente se .htaccess viene ritirato o meno. Se viene utilizzato .htaccess, i file in quella cartella non verranno caricati affatto.


4
Questo è il test più semplice se non ti dispiace che nulla funzioni per alcuni secondi durante la verifica.
Mordred

1
Sì, mi ci è voluto circa un secondo per verificare che il sito su cui stavo lavorando non stesse utilizzando file .htaccess.
bonh

1
Grazie, funziona a meraviglia :) Mi ha fatto risparmiare un po 'di tempo nel debugging!
Martijn van Hoof

32

Generalmente qualsiasi modifica nel file .htaccess dovrebbe avere effetti visibili. Se nessun effetto, controlla i tuoi file di configurazione apache, qualcosa come:

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

Dovrebbe essere cambiato in

AllowOverride All

E sarai in grado di cambiare le direttive nei file .htaccess.


Grazie. Ho trovato la sezione pertinente nel file principale apache2.conf per l'albero delle directory / var / www
Tim Richardson

6

Forse un metodo più logico sarebbe creare un file (es. Test.html), aggiungere del contenuto e poi provare a impostarlo come pagina indice:

DirectoryIndex test.html

Per la maggior parte, la regola .htaccess sovrascriverà la configurazione di Apache dove si lavora a livello di directory / file


4

Per rispondere alla prima delle tre domande poste, un modo semplice per vedere se il file .htaccess funziona o meno è attivare un errore personalizzato nella parte superiore del file .htaccess:

ErrorDocument 200 "Hello. This is your .htaccess file talking."
RewriteRule ^ - [L,R=200]

Alla seconda domanda, se il file .htaccess non viene letto, è possibile che la configurazione principale di Apache del server sia AllowOverrideimpostata su None. La documentazione di Apache contiene suggerimenti per la risoluzione dei problemi per questo e altri casi che potrebbero impedire a .htaccess di avere effetto.

Infine, per rispondere alla terza domanda, se è necessario eseguire il debug di variabili specifiche a cui si fa riferimento nella regola di riscrittura o se si utilizza un'espressione che si desidera valutare indipendentemente dalla regola, è possibile eseguire le seguenti operazioni:

Produci la variabile a cui fai riferimento per assicurarti che abbia il valore che ti aspetti:

ErrorDocument 200 "Request: %{THE_REQUEST} Referrer: %{HTTP_REFERER} Host: %{HTTP_HOST}"
RewriteRule ^ - [L,R=200]

Verifica l' espressione in modo indipendente inserendola in una <If>direttiva. Ciò ti consente di assicurarti che la tua espressione sia scritta correttamente o corrisponda quando ti aspetti che:

<If "%{REQUEST_URI} =~ /word$/">
    ErrorDocument 200 "Your expression is priceless!"
    RewriteRule ^ - [L,R=200]
</If>

Buon debug .htaccess!


3

Se hai accesso alla directory bin di Apache puoi usare,

httpd -M per controllare prima i moduli caricati.

 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)

Dopo di che semplici direttive come Options -Indexeso deny from allsolidificheranno che .htaccess funziona correttamente.


1

Per testare le tue regole di riscrittura htaccess, inserisci semplicemente l'URL a cui stai applicando le regole, posiziona il contenuto del tuo htaccess nell'area di input più grande e premi il pulsante "Test".

http://htaccess.mwl.be/


-1

Perché non mettere un po 'di spazzatura nel tuo file .htaccess e provare a ricaricare apache. Se apache non si avvia, sai che funziona. Rimuovi la spazzatura, quindi ricarica apache se carica complimenti per aver configurato correttamente .htaccess.


7
Non penso che Apache non si avvii o si avvii se c'è un cattivo .htaccess, dato che non controlla .htaccess finché non c'è una richiesta di pagina.
Andrew
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.