.htaccess viene ignorato anche se VirtualHost ha "AllowOverride All"


25

Sto eseguendo un server LAMP su Fedora 13 che funziona bene; tuttavia, ho appena aggiunto un file ".htaccess" alla cartella docroot del mio sito corrente che viene completamente ignorato.

Ho provato mezza dozzina di test diversi, incluso questo:

RewriteEngine on
RewriteBase /

RewriteRule ^.*$ index.php

Ma le immagini e tutte le altre pagine si caricano bene e i file inesistenti continuano a 404. Ho anche provato questo:

order deny,allow
deny from all

Ma ogni pagina si carica ancora bene. Anche in questo caso il file .htaccess viene semplicemente ignorato al 100%.

Inseriamo i nostri record di virtualhost in /etc/httpd/conf.d/virtual.conf. Sembra così:

NameVirtualHost *

<VirtualHost *>
    ServerName              intranet
    DocumentRoot            /var/www/default
    <Directory "/var/www/default">
        Options FollowSymLinks
        AllowOverride All

        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

<VirtualHost *>
    ServerName              ourwebsite.com
    DocumentRoot            /var/www/html/ourwebsite.com/docroot
    <Directory "/var/www/html/ourwebsite.com/docroot">
        Options FollowSymLinks
        AllowOverride All

        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

Cos'altro potrebbe causare il nostro server per IGNORARE completamente il .htaccessfile ??

Modificare:

Ho modificato il file .htaccess in sopra per dimostrare meglio che le mie modifiche vengono ignorate. Si noti che ho provato lo stesso file .htaccess sul server di produzione e ha funzionato bene.

Modifica 2:

OK, ho nuove informazioni! Solo a scopo di test, ho esaminato e modificato temporaneamente OGNI direttiva "AllowOverride" in AllowOverride All. Ho capito che la prima voce della Directory sembra sopraffare tutte le altre:

<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>

Quando l'ho cambiato in AllowOverride All, i miei file .htaccess iniziano ad avere effetto. È come se tutte le altre AllowOverride Alldirettive nei miei file di configurazione fossero ignorate!

Cosa dà ??

Risposte:


32

Incredibile. Ricordi come ho detto che si tratta di un server di sviluppo? Sì ... beh, ecco come si presenta DAVVERO la mia voce di host virtuale:

<VirtualHost *>
    ServerName              dev.ourwebsite.com
    DocumentRoot            /var/www/html/dev.ourwebsite.com/docroot
    <Directory "/var/www/html/ourwebsite.com/docroot">
        Options FollowSymLinks
        AllowOverride All

        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

Lo vedi? Beh non l'ho fatto. HO DIMENTICATO di cambiare la mia voce "Directory" in dev.ourwebsite.com anziché in ourwebsite.com - e questo ha fatto la differenza. Ho solo supposto che Apache avrebbe generato un errore se la directory non esistesse; ma questo vale solo per la direttiva DocumentRoot. è basato sulla corrispondenza, ovvero applica le regole se corrisponde alla richiesta in arrivo, ma per il resto non importa se lo dici a AllowOverride su unicorni magici.

Lascia che questa sia una lezione per tutti gli altri che vengono a cercare - quando tutto il resto fallisce, considera l'Onnipotente Typo.


In un milione di anni non l'avrei mai preso! Ho anche avuto un refuso nel percorso Directory, anche un progetto dev ... Grazie per avermi aperto gli occhi.
Gillytech,

Anch'io avevo un refuso nella parte della directory. Davvero, è stato così frustrante. È stata una benedizione il fatto di essermi imbattuto in questo e di essere venuto a conoscenza del fatto che posso fare errori super sciocchi.
Akash Kumar Sharma,

So che sono passati 7 anni, ma volevo solo entrare e dire che questa risposta mi ha aiutato. Era lo stesso tipo di cose. Avevo copiato le direttive da un altro host virtuale e ho cambiato il bit sbagliato. Grazie per aver condiviso queste informazioni! Navigare saggiamente.
dolst

5

Verifica se qualsiasi altro "AllowOverride None" presentato in "httpd.conf" sopra la dichiarazione virtualhosts. Probabilmente, hai "AllowOverride None" in docroot.


Il server con cui sto lavorando è un server di sviluppo ed è un duplicato esatto del nostro server di produzione. I file httpd.conf sono praticamente identici. L'unica differenza significativa è che il nostro "virtual.conf" su questo server ha meno voci e ogni sito ha il prefisso dev.. Tuttavia, il server di produzione funziona bene, i file .htaccess si comportano esattamente come previsto e il server di sviluppo semplicemente ignora del tutto il file .htaccess.
Brian Lacy,

0

Tre ipotesi:

Esiste effettivamente uno spazio dopo la virgola nella riga order deny, allowin .htaccess? Ad Apache non piace. Per me su F13 ho ricevuto 500s.

Hai una AccessFileNamedirettiva da qualche parte?

Se stai usando selinux hai il contesto corretto per il file ( ls -lZ)?


Non ricevo 500 errori. Il file .htaccess viene semplicemente ignorato. E ho verificato che comunque non avevo uno spazio lì dentro. Non so nulla di selinux o dei contesti, ma ho cercato come controllare e apparentemente è disabilitato. Per quanto riguarda AccessFileName, mi guarderò intorno, ma come ho detto nel mio commento sulla risposta di Denis, la configurazione di Apache per questi due server è effettivamente identica.
Brian Lacy,

Ho anche avuto problemi con lo spazio. Mi ha fatto impazzire.
egorgry il

Whoops, correzione: HO una direttiva AccessFileName nel mio httpd.conf. Si legge come segue:AccessFileName .htaccess
Brian Lacy,

0

Ho avuto questo su un nuovo server, alla fine ho capito che mod-rewrite non era abilitato di default.

ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load
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.