2008-11-05 4 views
14

Ist das möglich? Ich hatte Probleme mit SVN-Clients zugreifen zu können, um das Repository nicht mit der folgenden Fehlermeldung:Wie kann mod_dav_svn im Stammverzeichnis eines benannten virtuellen Hosts aktiviert werden?

Repository moved permanently to ' http://svn.example.com/test/ '; please relocate

Wenn ich die ‚/‘ bis zum Ende des Weges habe ich den Zugriff versuchte, sie streift es gerade weg wieder, und zeigt die gleiche Fehlermeldung. Meine Konfigurationsdatei sieht so aus:

<VirtualHost *> 
    ServerName svn.example.com 
    # Normal VirtualHost stuff here 

    <Location /svn> 
    # Uncomment this to enable the repository 
    DAV svn 
    SVNParentPath /some/path/to/repositories 

    # Setup mod_authz_svn, etc, etc here 
    </Location> 
</VirtualHost> 

Hinweis: Dies funktioniert. Aber wenn ich den Standort zu nur / ändere, hört es auf, mit dem obigen Fehler wieder zu arbeiten. Ist es möglich, das Root-Verzeichnis zu verwenden, oder fehlt mir hier etwas? Firefox zeigt die Repository-Auflistung an, wenn die Repositorys außerhalb des Stammverzeichnisses bereitgestellt werden.

Wie jemand anders darauf hingewiesen hat, scheint dies nur ein Problem innerhalb der benannten virtuellen Hosts zu sein ... Wer hat irgendwelche klugen Ideen warum?

+0

Sie sollten nur Fehlerhandler richtig einstellen. Erklärt unter – AbiusX

+0

Der Schlüssel Teil dieser Sie nicht zeigen ist, dass 'AuthzSVNAccessFile' in Kombination mit' 'ist, was nicht funktioniert. Ja, sogar 4,5 Jahre später. –

Antwort

6

Das Problem ist, dass Sie das Dokument root auch als Repository-Root verwenden (ich mache Ihnen keine Vorwürfe, das sollte einfach funktionieren, aber das tut es nicht).

Versuchen Sie, die DocumentRoot und SVNParentPath Richtlinien auf verschiedene physische Standorte zeigen, so dass die resultierende Konfigurationsdatei sollte wie folgt aussehen (abgekürzt):

<VirtualHost *:80> 
    DocumentRoot /home/svn.example.com/docroot 

    <Location /> 
     SVNParentPath /home/svn.example.com/svnroot 
     SVNListParentPath on 
    </Location> 
</VirtualHost> 

Auch als @Nigel Jewell sagt, dass Rewrite Block entfernen, für Vernunft.

+6

Dies funktioniert nicht für mich. Wenn ich auf das Root-Dokument trete, bekomme ich 403 Verboten. – Gili

+1

Danke. Das separate DocumentRoot und SVNParentPath half mir dabei, ein anderes Redirect-Problem zu beheben, das ich mit svn commit hatte und zu viele Redirect-Zyklen bekam. Du bist unglaublich! – geekinit

1

Ich endete mit mod_rewrite erfolgreich, um alle Zugriffe auf das Root-Verzeichnis in /svn neu geschrieben, damit Zugriff auf die Repositories von /repository_name. Als Referenz ist dies die Konfiguration, die ich am Ende mit:

# Rewrite/into /svn to avoid errors that seem to occur when using the root 
# for repositories. 
RewriteEngine On 
# Subdirectories that SHOULD be accessed directly, ie. trac 
# /svn should be here to avoid redirect loops 
RewriteCond %{REQUEST_URI} !^/(trac|svn)/ 
RewriteRule ^/(.*)$ /svn/$1 [PT] 
0
This is working for me: 

<Location /> 
    DAV svn 
    SVNPath /repository 
    AuthType Basic 
    AuthName "Repository authentication" 
    AuthUserFile /repository/.svn-auth 
    AuthzSVNAccessFile /repository/.svn-access 
    Satisfy All 
    Require valid-user 
</Location> 

dem Finger zeigen, den Browser zu http://127.0.0.1 zeigt mir die Repository-Inhalte.

+0

Es funktioniert für Browser gut, aber es funktioniert nicht mit tatsächlichen SVN-Clients; Sie erzeugen den Fehler in meinem ursprünglichen Beitrag. –

+0

Ich muss nicht zustimmen: die gleiche Konfiguration arbeitet mit dem Svn-Kommandozeilen-Client (hat nur eine svn ls http://127.0.0.1 bekommen den richtigen Repo-Inhalt) und mit einem GUI-Client, Versionen (http: // www. versionsapp.com/) für OSX. –

+0

Wirklich? Haben Sie das in einem VirtualHost versucht (was wir brauchen)? Das könnte es beeinflussen. Aber ich habe die Befehlszeile auf CentOS, Ubuntu und Tortoise-SVN unter Windows getestet, und alle gaben mir den gleichen Fehler. –

2

von Kommentaren zu meiner vorherigen Antwort fortsetzen, habe ich versucht, auch mit einem Virtual:

<VirtualHost 127.0.0.1:80> 
<Location /> 
    DAV svn 
    SVNPath /repository 
    AuthType Basic 
    AuthName "Repository authentication" 
    AuthUserFile /repository/.svn-auth 
    AuthzSVNAccessFile /repository/.svn-access 
    Satisfy All 
    Require valid-user 
</Location> 
</VirtualHost> 

und es funktioniert, kann ich das Repository mit firefox durchsuchen und sie mit dem SVN Kommandozeilen-Client zugreifen kann.

+0

Nun, ich bin dann ratlos. Ich kann nur daran denken, dass wir benannte virtuelle Hosts verwenden, keine IP-basierten. Ich weiß, dass es für uns nicht funktionieren würde, Ubuntu 8.04 einzurichten :(Ich wünschte, es wäre so einfach gewesen. Aber andererseits erlaubt mir mein Weg, trac auch als Unterverzeichnis zu verwenden. Danke für die Eingabe. –

+0

Ja Der einzige Unterschied sind die genannten virtuellen Hosts, die ich nicht testen kann, da ich diese Tests auf meinem Laptop mit einer sehr einfachen Apache-Installation durchführe Hoffe, ich war nützlich :) –

+0

Sie könnten, wenn Sie ein paar hinzugefügt haben namen in deine hosts-datei;) aber danke trotzdem, ich bin ratlos, warum es bei mir nicht funktioniert, das war im wesentlichen meine erste konfiguration, die du hier eingefügt hast, nur mit named vhosts. –

1

Ok, ich denke, wir haben festgestellt, wer daran schuld: benannte virtuelle Hosts :)

Mit dieser Konfiguration:

<VirtualHost dave.test> 
<Location /> 
    DAV svn 
    SVNPath /repository 
    AuthType Basic 
    AuthName "Repository authentication" 
    AuthUserFile /repository/.svn-auth 
    AuthzSVNAccessFile /repository/.svn-access 
    Satisfy All 
    Require valid-user 
</Location> 
</VirtualHost> 

wenn ich den Befehl svn ls http://dave.test laufen habe ich diesen Fehler:

svn: Server sent unexpected return value (405 Method Not Allowed) in response to 
PROPFIND request for '/' 

Also anscheinend gibt es ein Problem, wenn man versucht, mod_dav_svn im Stammverzeichnis eines benannten virtuellen Hosts zu aktivieren ...

+0

Ich hatte diese eine Show, es ist auch hässlicher Kopf. Ich weiß wirklich nicht, was das Problem überhaupt verursacht. –

0

Danke dafür, endlich funktioniert es mit einem VirtualHost aufgrund Ihrer Kommentare.

<VirtualHost *:80> 
    ServerAdmin [email protected] 
    ServerName svn.example.com 
    ServerAlias svn 
    DocumentRoot /home/svn.example.com/public_html 

    RewriteEngine On 

    RewriteCond %{REQUEST_URI} ^/svn$ 
    RewriteRule .* /svn/ [PT] 

    RewriteCond %{REQUEST_URI} !^/svn/ 
    RewriteRule ^/(.*)$ /svn/$1 [PT] 

    <Location /svn> 
      DAV svn 
      SVNParentPath /home/svn.example.com/public_html 
      SVNListParentPath on 
    </Location> 

    <LocationMatch /svn/.+> 
      AuthzSVNAccessFile /home/svn.example.com/support/access.cfg 

      AuthType Basic 
      AuthName "Subversion" 
      AuthUserFile /home/svn.example.com/.htpasswd 
      Require valid-user 
    </LocationMatch> 
</VirtualHost> 

Wie fand ich gezeigt, dass Sie wahrscheinlich auch hinzufügen wollen:

RewriteCond %{REQUEST_URI} ^/svn$ 
RewriteRule .* /svn/ [PT] 

Um http://svn.example.com/svn ohne Ende/zu fangen.

Nige.

+0

Beachten Sie, dass Nigel später hinzugefügt hat, dass dies nicht wirklich funktioniert (Wenn Sie zum Festschreiben gehen, etc.) –

0

DocumentRoot "/ usr/local/apache/htdocs/ForSvn" Server xxx.xxx Serveradmin xxx ErrorLog "/ usr/local/apache/logs/xxx-error_log" TransferLog „/ usr/local/apache/logs/xxx-access_log "

ReWriteEngine On 
RewriteCond %{REQUEST_URI} ^/svn$ 
RewriteRule .* /svn/ [PT] 

<Location /svn> 
     DAV svn 
     SVNParentPath /svn/repos 
     SVNListParentPath on 

     # Limit write permission to list of valid users. 
     <LimitExcept GET PROPFIND OPTIONS REPORT> 
      AuthType Basic 
      AuthName "Subversion" 
      AuthUserFile /svn/authfiles/svn-htpasswd 
      AuthzSVNAccessFile /svn/authfiles/svn-access.conf 
      Require valid-user 
     </LimitExcept> 
</Location> 

<LocationMatch /svn/myProject/> 
      AuthType Basic 
      AuthName "Subversion (private)" 
      AuthUserFile /svn/authfiles/svn-htpasswd 
      AuthzSVNAccessFile /svn/authfiles/svn-access.conf 
      Require user user1 user2 user3... 
</LocationMatch> 

und funktioniert gut mit mir. Danke dafür.

2

Gefunden dies in /etc/apache2/conf.d/subversion.conf (müssen Fehlerdokumente auf die Standardwerte zur Karte):

<VirtualHost *> 
    ServerName svn.example.com 
    ErrorLog /var/log/apache2/svn.example.com-error_log 
    TransferLog /var/log/apache2/svn.example.com-access_log 
    # 
    # Do not set DocumentRoot. It is not needed here and just causes trouble. 
    # 
    # Map the error documents back to their defaults. 
    # Otherwise mod_dav_svn tries to find a "error" repository. 
    # 
    ErrorDocument 400 default 
    ErrorDocument 401 default 
    ErrorDocument 403 default 
    ErrorDocument 404 default 
    ErrorDocument 405 default 
    ErrorDocument 408 default 
    ErrorDocument 410 default 
    ErrorDocument 411 default 
    ErrorDocument 412 default 
    ErrorDocument 413 default 
    ErrorDocument 414 default 
    ErrorDocument 415 default 
    ErrorDocument 500 default 
    ErrorDocument 501 default 
    ErrorDocument 502 default 
    ErrorDocument 503 default 
    # 
    <Location /> 
... 
    </Location> 

Nachdem ich das alles getan habe angefangen wie erwartet funktioniert.

+0

Ich kann immer noch nicht funktionieren: Der URI enthält nicht den Namen eines Repositorys. [403, # 190001] –

+1

perfekt, die IST RICHTIGE ANTWORT – AbiusX

+0

Ich musste dieses * innerhalb * von ' setzen ...' –

Verwandte Themen