.htaccess non funziona apache


135

Ho un server dal servizio AWS EC2 in esecuzione su Linux Ubuntu e ho installato apache, php e mysql.

Ho aggiunto un .htaccessfile nella radice del mio documento /var/www/html.

Ho inserito questo codice in esso: ErrorDocument 404 /var/www/html/404.phpe non viene ancora visualizzato.

Ho mantenuto questo comando più volte: sudo service httpd restartper riavviare il server ma nessuna modifica visualizzata ...

Come posso risolvere questo problema? Ho fatto qualcosa di sbagliato?

Grazie in anticipo!


2
Sei sicuro di voler mappare l' 400 Bad Requesterrore /var/www/html/404.php?
Jon Lin,

Risposte:


288

Innanzitutto, notare che il riavvio di httpd non è necessario per i file .htaccess. I file .htaccess sono specifici per le persone che non hanno root - ovvero, non hanno accesso al file di configurazione del server httpd e non possono riavviare il server. Poiché sei in grado di riavviare il server, non hai bisogno di file .htaccess e puoi utilizzare direttamente la configurazione del server principale.

In secondo luogo, se i file .htaccess vengono ignorati, è necessario verificare che AllowOverride sia impostato correttamente. Vedi http://httpd.apache.org/docs/2.4/mod/core.html#allowoverride per i dettagli. È inoltre necessario assicurarsi che sia impostato nell'ambito corretto, ovvero nel blocco giusto nella propria configurazione. Assicurati di NON modificare quello nel blocco, per esempio.

Terzo, se vuoi assicurarti che un file .htaccess sia effettivamente letto, metti la spazzatura in esso. Una riga non valida, ad esempio "LINEA NON VALIDA QUI", nel tuo file .htaccess, causerà un errore del server 500 quando punti il ​​tuo browser alla directory che contiene quel file. In caso contrario, non hai AllowOverride configurato correttamente.


141
+1 per mettere immondizia nel file .htaccess come strumento diagnostico.
retrohacker

46
L'immondizia nella programmazione è più utile di quanto sembri.
EnKrypt,

1
Ho inserito il "A STRING" mio .htaccess, quindi avrei ricevuto un errore, quindi ho inserito AllowOverride Alltutto apache2.confnel mio Debian e funziona
Alex

1
Si noti che AllowOverridefunziona solo nelle <Directory>direttive e verrà ignorato se inserito in una <Location ...>sezione, vedere: httpd.apache.org/docs/2.4/mod/core.html#allowoverride
Daniel Sokolowski

2
Si noti inoltre che la <Directory>direttiva prevede un percorso assoluto anziché relativo. Nel mio caso, <Directory /> fallito mentre <Directory /var/www/html/subdir>funzionava.
Lukas Knuth,

115
  1. Abilita il modulo mod_rewrite di Apache

    a2enmod rewrite

  2. aggiungi il seguente codice a /etc/apache2/sites-available/default

    AllowOverride All

  3. Riavvia apache

    /etc/init.d/apache2 restart


7
notare che in Apache 2.4 i file di configurazione in / etc / apache2 / siti-disponibili devono terminare ora in .conf. E ho avuto un po 'di confusione sul mio server con un default.conf in / etc / apache2 / sites-available e uno in / etc / apache2 /
rubo77

2
Grazie, nel mio caso la riscrittura non era abilitata di default in apache2
Cross

seguo già questi passaggi ma non funziona in Apache 2.4 quello che sto facendo di sbagliato = [
Luciano Andress Martini

Sembra che richieda l'override dell'ip richieda l'autenticazione, questo comportamento è inatteso (consenti da un determinato ip in apache 2.2 non farlo) e secondo me può essere molto pericoloso, perché l'eccezione ip sta analizzando l'autenticazione, in apache 2.2 sono cose completamente diverse !
Luciano Andress Martini,

Ho omesso il primo passo ma ho cambiato AllowOverride su All nel mio apache.conf (Debian 8, /etc/apache2/apache.conf), riavviato e i file non sono accessibili, bene. Ma l'errore non è come l'autorizzazione negata ma 500 Errore interno del server, perché? Posso ripararlo?
dasLort,

44

Se hai provato tutto quanto sopra, che sono tutte risposte valide e valide, e il tuo file htaccess non funziona o non viene letto, modifica la direttiva nel apache2.conffile. Sotto Ubuntu il percorso è/etc/apache2/apache2.conf

Cambia la <Directory>direttiva che punta alle tue pagine web pubbliche, dove risiede il file htaccess. Cambia da AllowOverride NoneaAllowOverride All

<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>

Ho avuto lo stesso problema e ho trovato la risposta e la spiegazione su Ubuntu Ask! forum /ubuntu/421233/enabling-htaccess-file-to-rewrite-path-not-working


2
Oppure, può essere aggiunto su VHost
ssi-anik l'

In realtà, AllowOverride FileInfoè richiesto solo in 3a riga per .htaccesspoter leggere e utilizzare il file. Allconsente inoltre sostituzioni di configurazione aggiuntive, ad esempio .httpasswd(che possono essere abilitate singolarmente utilizzando Authconfiginvece di All).
Rafal

20

Per Ubuntu,
Innanzitutto, esegui questo comando: -

sudo a2enmod rewrite

Quindi, modifica il file /etc/apache2/sites-available/000-default.confusando nano o vim usando questo comando: -

sudo nano /etc/apache2/sites-available/000-default.conf

Quindi nel 000-default.conffile, aggiungilo dopo la riga DocumentRoot /var/www/html. Se la tua directory html di root è qualcos'altro, allora scrivi che: -

<Directory "/var/www/html">
  AllowOverride All
</Directory>

Dopo aver fatto tutto, riavvia apache usando il comando sudo service apache2 restart


6

Segui 3 passaggi

  1. Abilita mode_rewrite usando il seguente comando

    sudo a2enmod rewrite

Verrà richiesta la password. Quindi inserisci la tua password

  1. Aggiorna il tuo file 000-default.conf o default.conf che si trova in / etc / apache2 / sites-available / . non puoi modificarlo direttamente. quindi usa il comando seguente per aprire

    sudo gedit /etc/apache2/sites-available/000-default.conf

Oppure sudo gedit /etc/apache2/sites-available/default.conf

otterrete

DocumentRoot / var / www / html

O

DocumentRoot / var / www

linea. Aggiungi il seguente codice dopo di esso.

<Directory /var/www/html/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>

Rendi utente il percorso del tag della directory è lo stesso mostrato nel tuo file.

  1. Riavvia il tuo server Apache usando il seguente comando

    sudo service apache2 restart


Grazie. Saluti dal Brasile.
Fox.11

5

Molto probabilmente, AllowOverride è impostato su Nessuno. nella sezione Directory di apache2.conf situata nella cartella / etc / apache2

Prova a impostarlo su AllowOverride All


5

Nella mia esperienza, la direttiva / var / www / directory impedisce le direttive di virtualhost delle sottocartelle. Quindi se hai provato tutti i suggerimenti e ancora non funziona e stai usando virtualhosts prova questo;

1 - Assicurati di avere la AllowOverride Alldirettiva /etc/apache2/sites-available/example.com.conf

2 - Controlla le direttive / var / www / Directory in /etc/apache2/apache2.conf(possibilmente alla linea 164), che sembra;

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

Se esiste una AllowOverride Nonedirettiva, cambiarla AllowOverride All o semplicemente scappare


3

Per impostazione predefinita, Apache proibisce l'uso di un file .htaccess per applicare le regole di riscrittura, quindi

Passaggio 1: Abilitazione di mod_rewrite (se non abilitato) Innanzitutto, dobbiamo attivare mod_rewrite. È disponibile ma non abilitato con un'installazione pulita di Apache 2.

$ sudo a2enmod rewrite

Questo attiverà il modulo o ti avviserà che il modulo è già abilitato. Per rendere effettive queste modifiche, riavvia Apache.

$ sudo systemctl restart apache2

mod_rewrite è ora completamente abilitato. Nel passaggio successivo imposteremo un file .htaccess che useremo per definire le regole di riscrittura per i reindirizzamenti.

Passaggio 2: impostazione di .htaccess Aprire il file di configurazione di Apache predefinito utilizzando nano o l'editor di testo preferito.

$ sudo nano /etc/apache2/sites-available/000-default.conf

All'interno di quel file, troverai un blocco a partire dalla prima riga. All'interno di quel blocco, aggiungi il seguente nuovo blocco in modo che il tuo file di configurazione sia simile al seguente. Assicurarsi che tutti i blocchi siano rientrati correttamente.

/etc/apache2/sites-available/000-default.conf

<VirtualHost *:80>
    <Directory /var/www/html>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Require all granted
    </Directory>

    . . . 
</VirtualHost>

Salva e chiudi il file. Per rendere effettive queste modifiche, riavvia Apache.

$ sudo systemctl restart apache2

Fatto. Il tuo .htacess dovrebbe funzionare. Questo link può effettivamente aiutare qualcuno https://www.digitalocean.com/community/tutorials/how-to-rewrite-urls-with-mod_rewrite-for-apache-on-ubuntu-16-04


Il comando di riavvio che ha funzionato per me è $ sudo httpd -k restart(Red Hat 4.4.7-23)
Himalaya Garg

3

Ho cancellato questo uso. Usando questo sito clicca qui , segui i passaggi, gli stessi passi seguono fino alla versione 18.04 di Ubuntu


1

In WampServerOpen WampServer Tray icon ----> Apache ---> Moduli Apache ---> rewrite_module



0

Per completezza, se "AllowOverride All" non risolve il problema, è possibile eseguire il debug di questo problema utilizzando:

  1. Esegui apachectl -Se vedi se hai più di un namevhost. È possibile che httpd stia cercando .htaccess di un altro DocumentRoot.

  2. Usa strace -f apachectl -Xe cerca da dove sta caricando (o non caricando) .htaccess.

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.