È questo un modo corretto per abilitare htaccess in Apache 2.4.7


46

In quasi tutte le soluzioni di "Come attivare htaccess", si dice che il file / etc / apache2 / sites-available / default deve essere modificato. Ma non esiste tale file in Apache 2.4.7

Ho letto da qualche parte che il nuovo file predefinito è 000-default.conf. Quindi l'ho modificato e ho provato ad aggiungere la riga:

AllowOverride All

Ma Apache2 non si è riavviato correttamente e ha dato un errore. Da una documentazione di apache2, ho scoperto che AllowOverride è consentito solo nella <Directory>sezione. Quindi ho provato ad aggiungere questo:

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

E questo sembra funzionare. Ma non sono sicuro che avrei dovuto inserire / var / www lì. È un modo corretto di farlo o il mio computer esploderà in qualche modo?


guarda questo. Potrebbe aiutarti. stackoverflow.com/questions/33062142/...
Avnish alok

Risposte:


58

tl; dr

Sì, è il modo corretto.
Ma per essere più semantici : Sì, è il modo corretto per consentire .htaccessdi sovrascrivere tutte le direttive nella /var/wwwdirectory.


Come hai scoperto, AllowOverrideè consentito solo nella Directorysezione.

Usando il tuo esempio:

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

Questo sta dicendo ad Apache che tutte le configurazioni possono essere sovrascritte in /var/wwwtutte le sue sottodirectory (ricorsivamente).


Per un esempio migliore, considera di avere la seguente configurazione nel tuo host virtuale:

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

<Directory "/var/www/uploads">
    AllowOverride Limit
</Directory>

E la seguente struttura di directory:

var/
    www/
        .htaccess
        uploads/
            .htaccess
            a/
                .htaccess
            b/
                .htaccess
        code/
            .htaccess
            c/
                .htaccess
            d/
                .htaccess

Quello che ho fatto qui, è creare un .htaccessin ogni sottodirectory della /var/wwwdirectory.
Di solito non dovrebbe essere così, ma questo è solo per il bene dell'esempio

Confrontando la struttura delle directory con la configurazione, significa che tutti i .htaccessfile all'interno della /var/wwwcartella e le sue sottodirectory, esclusa la /var/www/uploadsdirectory e le sue sottodirectory, possono sovrascrivere tutti i tipi di direttive.

Ma /var/www/uploadsei suoi sotto-directory possono utilizzare solo il .htaccessfile per ignorare le Allow, Denye Orderdirettive.

Nota: A partire da apache 2.4 (che è disponibile di default in 13.10+) Allow, le direttive Denye Ordersono state sostituite da un'unica direttiva denominata Require.


39

Per prima cosa abilita la riscrittura usando questo comando:

sudo a2enmod rewrite

Quindi riavviare apache2:

sudo service apache2 restart

Quindi vai nella sites-availablecartella:

/etc/apache2/sites-available

Modifica il file denominato defaulte cambia AllowOverride nonein AllowOverride All. Esistono due righe in cui è necessario apportare questa modifica.

Questo farà .htaccessfunzionare il tuo server VPS.

Questo ha funzionato su un Ubuntu 12.04.5 VPS.


3
non esiste alcun file denominato predefinito, ma esiste un file denominato 000-default.conf
Tahir Yasin,

1
+1 per ricordare di abilitare la riscrittura, mi mancava questo e non riuscivo a capire perché non funzionasse dopo aver fatto tutte le cose.
Abdul Mannan,

Questo commento si riferisce alla configurazione di Apache 2.2, non 2.4. In 2.4, il defaultfile viene chiamato 000-default.confe non contiene la AllowOverride Nonelinea.
ben_nuttall,

il file è 000-default.confe non è possibile aggiungere AllowOverride Nonequi, se si ricarica apache dare errore
Kreker

Se tutto ciò che serve è consentire che le direttive mod_rewrite vengano ignorate .htaccess, è meglio usarle AllowOverride FileInfo. Sebbene FileInfo includa già un ampio set di direttive, limiteresti comunque a sovrascrivere molte direttive.
Dan

3

Nel mio caso, ha funzionato in questo modo:
ho dovuto aggiungere le seguenti righe:

Order allow, deny
Allow from all

Quindi sembra così:

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

Sebbene ciò possa aver risolto il tuo problema, non è correlato alla domanda dell'OP. Le direttive di ordine e autorizzazione sono direttive in apache2.2 e precedenti. Sono utilizzati per consentire / negare l'accesso agli utenti in determinate directory. Non hanno alcun impatto sul fatto che le direttive in un file .htaccess vengano analizzate o meno.
Dan,

2

Ecco uno snippet su come abilitare htaccess in Apache 2.4 senza modificare la configurazione predefinita:

cat <<EOF> /etc/apache2/conf-available/allow-override.conf
<Directory "/var/www">
    AllowOverride all
</Directory>
EOF

a2enconf allow-override
service apache2 reload
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.