2012-11-13 9 views
8

Apache 2.2.20 reindirizza automaticamente tutte le richieste che sono punti alle directory e non ha alcuna barra finale sullo stesso URL con barra finale, come mostrato di seguito:Come disabilitare il reindirizzamento 301 che aggiunge la barra finale al nome della directory in Apache

In tutti i casi è un comportamento soddisfacente, ma ho bisogno di disattivare questa funzione per una cartella speciale (non per tutti), e non riesco a trovare se potessi farlo.

La ricerca di regole 'Riscrivi' dice ai fondamenti niente - solo direttiva LoadModule mod_rewrite.so. Inoltre, non ci sono file .htaccess nel server directory nell'albero delle directory. C'è qualche altra direttiva che fa qualcosa?

UPD1 cerco di installare SVN attraverso HTTP con successivo config:

LoadModule dav_svn_module  /opt/libexec/mod_dav_svn.so 
LoadModule authz_svn_module /opt/libexec/mod_authz_svn.so 

NameVirtualHost *:8000 
<VirtualHost *:8000> 
    ServerAdmin [email protected] 
    ServerName some.host.org 
    DocumentRoot /path/to/wwwroot 
    DAVLockDB /opt/var/lock/davlock/svndavlockdb 

    <Directory /path/to/wwwroot> 
     Options FollowSymLinks Indexes 
#  #AllowOverride None 
     Order allow,deny 
     Allow from all 
    </Directory> 

    <Directory /path/to/wwwroot/svn> 
     Options FollowSymLinks Indexes 
     AllowOverride None 
     Order allow,deny 
     Allow from all 
    </Directory> 

    CustomLog /path/to/wwwroot/log/access_log.txt combined 
    ErrorLog /path/to/wwwroot/log/error_log.txt 

    <Location /svn> 

     #AllowOverride None 
     #RewriteEngine Off 
     #RewriteOptions AllowNoSlash 
     DirectorySlash Off 

     DAV svn 
     SVNParentPath /path/to/wwwroot/svn 
#  SVNListParentPath on 

     AuthType Basic 
     AuthName "Subversion Repository" 
     AuthBasicAuthoritative Off 
     AuthUserFile /path/to/wwwroot/svn/.htauthfile 
     <Limit GET OPTIONS REPORT PUT POST DELETE PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK> 
      Require valid-user 
     </Limit> 
    </Location> 

</VirtualHost> 

UPD2 Sembra che la direttiva "DirectorySlash Off" funziona solo per "some.host.org/svn" e non funziona per "some.host.org/svn/repo1", "some.host.org/svn/repo2" ecc. - le directory figlio non ereditano questa opzione.

UPD3 cerco di aggiungere le seguenti righe nei file config, ma risultato è lo stesso - il lavoro "DirectorySlash Off" solo per "/ svn" e non per bambino.

<LocationMatch "/svn/.*"> 
    DirectorySlash Off 
</LocationMatch> 

risolto Problema risolto. Questo è un mio errore: ho inserito la radice del repository SVN nella cartella DocumentRoot, quindi apache e web_dav non possono capire, chi deve gestire la richiesta. Questo vale per il client TortoiseSVN almeno.

Commenti degli sviluppatori svn:

significa che il vostro httpd.conf è configurato correttamente. Solitamente questo errore si verifica quando hai definito la "posizione" virtuale di Subversion per esistere all'interno di due diversi ambiti contemporaneamente.

Ad esempio, se hai esportato un repository come, ma hai anche impostato DocumentRoot come/www, allora sei nei guai. Quando la richiesta arriva per/www/foo/bar, apache non sa se trovare un file reale denominato/foo/bar all'interno di DocumentRoot, o se chiedere a mod_dav_svn di recuperare un file/bar da/www/foo repository. Di solito il primo caso vince, e quindi l'errore "Spostato in modo permanente".

La soluzione è quella di assicurarsi che il repository non si sovrapponga o viva in aree già esportate come normali condivisioni web.

È anche possibile che nella radice Web sia presente un oggetto con lo stesso nome dell'URL del repository. Ad esempio, immagina che la root dei documenti del tuo server web sia/var/www e il tuo repository Subversion si trovi in ​​/ home/svn/repo. Quindi configurare Apache per servire il repository a http://local.host/myrepo. Se poi crei la directory/var/www/myrepo/ciò causerà l'errore 301.

risposta

9

Usa mod_dir's DirectorySlash directive.Esempio da docs:

# see security warning in docs 
<Location /some/path> 
    DirectorySlash Off 
    SetHandler some-handler 
</Location> 
+0

Provo ad aggiungere la direttiva DirectorySlash, ma non funziona. – kruz05

+0

@ kruz05 - Hai accettato una risposta che non funziona? –

+2

Per attivare TUTTI i reindirizzamenti di directory, basta aggiungerlo al file .htaccess senza condizione di posizione – Codebeat

2

Aggiunta

DirectorySlash Off 

a .htaccess funzionato bene per me.