2015-06-18 10 views
12

Nella mia configurazione di Apache Ho un host virtuale configurato in questo modo:Come utilizzare DAV e DirectoryIndex in Apache 2.4?

Alias /mediamanager /storage/files/mediamanager 
<Directory /storage/files/mediamanager> 
    DirectoryIndex /mediaManagerIndex.php 
    DAV On 
    # ... And some authentication directives ... # 
</Directory> 

L'idea è che qualcuno possa accedere ai file sia da un WebDAV Client e anche un semplice browser web, nel qual caso qualche bella vista directory è generato da uno script PHP.

Questo ha funzionato benissimo in Apache 2.2, ma recentemente ho aggiornato ad Apache 2.4 e ora è rotto. Ho il forte sospetto che io soffra di this bug che ha già 2 anni e nessuna correzione in vista. La soluzione proposta per aggiungere:

<Limit PROPFIND> 
    DirectoryIndex never-encounterable-file-name.html 
</Limit> 

Non funziona per me. Probabilmente perché voglio ancora avere un indice di directory. Se rimuovo completamente il mio DirectoryIndex, WebDAV funziona di nuovo (non esiste index.html o file simili in questa directory), ma ovviamente ho perso la possibilità di usare il mio file PHP come indice di directory. Ho provato a specificare il mio DirectoryIndex in un <Limit GET> ma questo non ha avuto alcun effetto.

C'è un modo per far sì che DAV e DirectoryIndex funzionino contemporaneamente in Apache 2.4 su Debian (se possibile, senza modificare il codice sorgente e ricompilare)?

+0

È una specie di non risposta al tuo problema specifico, ma un altro modo per risolvere potenzialmente questo problema è quello di abbandonare il gestore di webdav di apache e passare a qualcosa come [sabre/dav] (http: // saber .io /) – Evert

risposta

4

Per me, la seguente configurazione ha risolto entrambi i problemi:

  • Web DAV funziona di nuovo
  • directory indicizzazione, se l'utente utilizza un browser per accedere al deposito

Funziona implementando manualmente la funzionalità directory indicizzazione con semplici regole di riscrittura, applicati solo per il metodo GET richiesta .

Il seguente codice deve essere inserito all'interno del server config o del contesto dell'host virtuale nel file di configurazione di apache.

# Turn off (automatic) Directory-Indexing 
DirectoryIndex disabled 

RewriteEngine On 

# Rewrite rules for the root directory 
RewriteCond "%{REQUEST_METHOD}" "(GET)" 
RewriteRule "^/$"     "/index.php" [L] 

# Rewrite rules for other sub-directories 
RewriteCond "%{REQUEST_METHOD}" "(GET)" 
# The following line checks, if the index.php file exists 
RewriteCond "%{DOCUMENT_ROOT}/$1/index.php" "-f" 
RewriteRule "^/(.*)/$"     "/$1/index.php" [L] 

Non dimenticare di ricaricare Apache!

+0

Yay! Brillante! Lavori! – yankee

4

Per risolvere questo problema, disabilitare l'indicizzazione delle directory per il sito WebDAV.

Nel file sites-available/site.conf aggiungere DirectoryIndex disabled alla dichiarazione <Directory>, in questo modo:

<Directory /path/to/my/webdav/dir> 
        Options Indexes FollowSymLinks MultiViews 
        AllowOverride all 
        Require all granted 

        DirectoryIndex disabled 
    </Directory> 

Poi basta ricaricare Apache e non sarà più avere quel problema:

sudo service apache2 reload 
+0

Ma voglio avere l'indicizzazione della directory se l'utente usa un semplice browser web vecchio per accedere al repository – yankee

+0

Sì, va bene. Basta configurare il tuo WebDAV su una porta diversa. Quindi port: 80 continuerebbe a servire regolarmente il sito con l'indicizzazione delle directory. Ma accedi a WebDAV su una porta diversa, ad esempio 443.Quindi nel tuo file di configurazione aggiungerai DirectoryIndex disabilitato solo al VirutalHost per quella porta. –

+2

Questa sarebbe una possibile soluzione di emergenza, ma ha il difetto che ho bisogno di dire agli utenti due URL: uno per WebDAV e uno per l'utilizzo di un browser web. (E questo non è necessario dal punto di vista concettuale è dimostrato da Apache 2.2 dove questo funziona davvero.). – yankee

0

Per me la risposta non era giusta ... ho dovuto cambiare ^/$ e ^/(. )/$ a^/? $ E^/? (.)/$ in ordine per funziona ...

Problemi correlati