2011-12-25 12 views
9

So che questa domanda è stata posta più volte. Ma non riesco a farlo funzionare.Come attivare mod_rewrite?

Ho installato Apache2 nel mio server Ubuntu Posso anche confermare che mod_rewrite sia installato usando phpinfo() ;. Ho anche messo un file chiamato .htaccess nella mia cartella principale (/var/www/.htaccess). Nel mio file .htaccess ho incollare il seguente codice:

Options +FollowSymLinks 
RewriteEngine On 
RewriteRule ^.*$ test.php 

Quindi tutto viene reindirizzato a test.php

Ma ancora non funziona. Così ho controllato il mio file httpd.conf in/etc/apache2. È completamente vuoto, senza linee di codice (questo mi sembra un po 'strano) ?! Tuttavia il check-in StackOverflow risponde ci dovrebbe essere almeno il seguente codice nel file httpd.conf:

<Directory /> 
    Options FollowSymLinks 
    AllowOverride All 
    Order deny,allow 
    Deny from all 
    Satisfy all 
</Directory> 

Così ho incollare quel codice in httpd.conf. E riavviato Apache con sudo /etc/init.d/apache restart. E ancora non funziona?

Ho anche testato per aprire il file/siti-enabled/000-default e/sites-available/default, dove tutte le impostazioni dell'host virtuale si trovano e cambiano sotto la directory /var/www e / su AllowOverride All. Il mod_rewrite continua a non funzionare. Qualcuno può aiutarmi per favore. Per un po 'questo problema mi ha fatto cuocere i dadi.

Inoltre, il mio file apache2.conf non funziona. Ho provato a scrivere cose senza senso. Ed è ancora mi dà la normale conseguenza, invece di http errore 500

+2

Se si utilizza una configurazione standard, le impostazioni di base del documento sono in/etc/apache2/sites-available/default se questo è ciò che si sta cercando. Qui puoi inserire AllowOverride All che consentirà la riscrittura tramite il file .htaccess. – Dan

risposta

7

Tutti i suggerimenti di Niels Bom sono i più intelligenti (credo).Ma aggiungo questo come primo suggerimento: prova ad avviare e fermare apache tramite il comando Ubuntu: quindi quando deve essere fermato, assicurati che sia fermato, ovvero verifica che la pagina locale non venga più visualizzata.

  • leggere cosa c'è nella cartella /etc/apache2/. Non ci dovrebbero essere apache2.conf conf.d envvars httpd.conf mods-available mods-enabled ports.conf sites-available sites-enabled
  • quindi se tutto è ok, dare un'occhiata a mods-enabled dove troverete se i mods sono abilitati se è così, allora si può andare avanti, altrimenti un'occhiata alle altre risposte sull'abilitazione modrewrite
  • dai un'occhiata a sites-enabled: è qui che puoi trovare i siti che sono ... (indovinate cosa?) abilitati. Ci dovrebbe essere il sito web default.
  • se è così, apri questo file e prova a mettere apache senza senso, riavvia il server e vedi se è felice o no. Se non è felice, va bene. Se è felice allora stai lavorando sul file sbagliato
  • ultimo: prova a verificare quali sono le autorizzazioni per i file htaccess per questo vhost predefinito. Ecco come funzionano: se Apache non trova alcuna direttiva nel file vhost, applicherà la configurazione globale. Quindi suggerirei di aggiungere la configurazione nel file vhost, tra i tag <virtualhost> - </virtualhost> (ovviamente).

Per favore dimmi cosa sta succedendo e sarei felice di aggiornare la mia domanda di conseguenza.

0

prega di controllare /etc/apache2/apache2.conf

+0

Già fatto. Non c'è ci sia – einstein

+0

ci controllo ancora, e nella mia installazione la direttiva directory è in: /etc/apache2/mods-available/alias.conf. assicurati che il modulo alias sia abilitato. –

+0

Ho quel file? Cosa devo fare con questo? – einstein

10

se si esegue questo comando,

sudo a2enmod rewrite 

Ubuntu uscita whethere è attivato o già in esecuzione.

+1

è attivato. Ma mod_rewrite non funziona? – einstein

+0

Questo non funzionerà. Le configurazioni devono essere riscritte a mano. – Sliq

2

Bene, verifichiamo ipotesi:

  1. Put nonsense nei file di configurazione di Apache (e riavviare Apache per far loro abbiano effetto), non Apache "lamenta" al riavvio? Quindi prova a caricare quei file. Prova questo per ogni file di configurazione di Apache che trovi. Ora hai un elenco completo dei file di configurazione di Apache che vengono caricati.

  2. mettere sciocchezze nel tuo htaccess, ricaricare la pagina, ottieni un errore 500? In caso contrario, l'htaccess non viene caricato.

  3. Mettere la dichiarazione più semplice mod_rewrite nel vostro .htaccess:

    Opzioni + FollowSymLinks RewriteEngine On RewriteRule^* $ test.html

Questo dovrebbe riscrivere ogni richiesta di Test.html. .

Provalo e forniscici i risultati.

+0

Ci scusiamo per la risposta tardiva. Pensavo che il mio htaccess funzionasse, ma non lo fece. Ho provato i tuoi tre passaggi e nessuno di loro funziona come previsto. Hai idea di cosa fare. I passaggi 1 e 2 non mi danno un errore http 500 e 3 sono ignorati dal server – einstein

+0

Se Apache non si lamenta al riavvio se hai messo delle sciocchezze in un file di configurazione Apache, Apache non sta leggendo quel file di configurazione. Potresti fornirci un elenco completo di ogni file e dei suoi contenuti in/etc/apache2 /? –

+0

Giusto per essere chiari: con "Apache config file" intendo qualsiasi file in/etc/apache2/e * not * your .htaccess. –

0

Nella tua domanda, hanno citato,

Inoltre, il mio file apache2.conf non funziona. Ho provato a scrivere cose senza senso. Ed è ancora mi dà la normale conseguenza, invece di http errore 500

Quindi, prima di pubblicare più roba da provare-out con i file .conf,

corsa strace -o somefilename.txt sudo /etc/init.d/apache restart

strace - chiamate di sistema trace e segnali: strace(1) - Linux man page.


La -o somefilename.txt parte mette l'output di strace in somefilename.txt. Aprire il file di testo e cercare httpd.conf. Si dovrebbe essere in grado di vedere il codice simile a:

stat("/etc/httpd/conf/httpd.conf", {st_mode=S_IFREG|0644, st_size=35894, ...})=0 
open("/etc/httpd/conf/httpd.conf", O_RDONLY|O_CLOEXEC) = 3 

Il percorso per httpd.conf sarà sostituito dal percorso predefinito httpd.conf

Se si trova uno, quindi aprire che httpd.conf e apportare le modifiche lì. Altrimenti, uno httpd.conf non viene caricato.

Se in seguito è il caso, provare:

sudo /etc/init.d/apache -f /path/to/httpd.conf start 

Inoltre, verificare la presenza di NameVirtualHost *:80 e assicurarsi che non è commentato.

+1

sì, questo aiuta – Prozi

5

Perché questa discussione ranghi molto elevato su google, qui un'altra soluzione:

che cosa sta causando il problema?

È causato dal fatto che la definizione standard in Apache blocca semplicemente tutti gli elementi .htaccess. Seriouslsy. Questo sembra essere lo stato iniziale in Ubuntu 12.04 LTS.

SOLUZIONE

in/etc/apache2/sites-available/default (che è un file, non una cartella) c'è un blocco di codice come

<Directory /var/www/> 
    Options Indexes FollowSymLinks MultiViews 
    AllowOverride XXXXXXXXXXXXXXXXXXX 
    Order allow,deny 
    allow from all 
</Directory> 

Qui si dovrebbe cambiare

AllowOverride None 

a

AllowOverride All 

IMPORTANTE

Devi fare questi cambiamenti con i diritti di sudo, anotherwise Ubuntu non salverà il file. Dopo un RIAVVIO le tue cose .htaccess dovrebbero funzionare. Per provare .htaccess inserisci semplicemente del testo senza senso e naviga su localhost o 127.0.0.1 -> Se vedi "errore interno del server": voilà! Rimuovi le sciocchezze e sei pronto per partire.