2008-11-05 16 views
14

¿Esto es posible? Tenía problemas con los clientes SVN no ser capaz de acceder al repositorio con el siguiente mensaje de error:¿Cómo habilitar mod_dav_svn en el directorio raíz de un host virtual con nombre?

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

Si he añadido el '/' al final de la ruta que estaba tratando de acceso, sólo tiras fuera de nuevo, y muestra el mismo mensaje de error. Mi archivo de configuración se ve así:

<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> 

Nota: Esto funciona. Pero si cambio la ubicación a solo /, deja de funcionar nuevamente con el error anterior. ¿Es posible usar el directorio raíz o me falta algo aquí? Firefox muestra el listado de repositorios bien cuando se sirve a los repositorios desde la raíz.

Como alguien más señaló, esto solo parece ser un problema dentro de los hosts virtuales nombrados ... Alguien tiene alguna idea inteligente ¿por qué?

+0

Solo debe establecer manejadores de errores correctamente. Explicación a continuación – AbiusX

+0

La parte clave de esto que no se muestra es que 'AuthzSVNAccessFile' en combinación con' 'es lo que no funciona. Sí, incluso 4.5 años después. –

Respuesta

6

El problema es que está utilizando la raíz del documento también como la raíz del repositorio (no lo culpo, esto debería funcionar, pero no es así).

Apunte con los DocumentRootSVNParentPath y directrices a diferentes ubicaciones físicas, por lo que el archivo de configuración resultante debería tener este aspecto (abreviado):

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

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

Además, como dice @Nigel Jewell, eliminar ese bloque de reescritura, por cordura.

+6

Esto no funciona para mí. Al tocar el documento raíz, aparece 403 Prohibido. – Gili

+1

Gracias. El DocumentRoot y SVNParentPath en realidad me ayudaron a solucionar otro problema de redireccionamiento que estaba teniendo con svn commit obteniendo demasiados ciclos de redireccionamiento. ¡Eres increíble! – geekinit

1

Terminé utilizando mod_rewrite con éxito para reescribir todos los accesos al directorio raíz en /svn, obteniendo acceso a los repositorios desde /repository_name. A modo de referencia, esta es la configuración que terminó con:

# 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> 

Señalando que el navegador http://127.0.0.1 me muestra el contenido del repositorio.

+0

Funciona bien para los navegadores, pero no funciona con clientes reales SVN; producen el error en mi publicación original. –

+0

Tengo que estar en desacuerdo: esta misma configuración está trabajando con el cliente de línea de comando svn (simplemente hice un svn ls http://127.0.0.1 obteniendo el contenido repo correcto) y con un cliente GUI, Versiones (http: // www. versionsapp.com/) para OSX. –

+0

¿De verdad? ¿Has probado esto dentro de VirtualHost (que necesitamos)? Eso puede afectarlo. Pero probé la línea de comandos en CentOS, Ubuntu y Tortoise-SVN en Windows, y todos me dieron el mismo error. –

2

Continuando con los comentarios a mi respuesta anterior, he tratado también con un VirtualHost:

<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> 

y está funcionando, puedo navegar el repositorio con Firefox y se puede acceder a ella con el cliente de línea de comandos SVN.

+0

Bueno, estoy perplejo entonces. Todo lo que puedo pensar es que estamos usando hosts virtuales con nombre, no basados ​​en IP. Sé que no funcionaría para nosotros la configuración en Ubuntu 8.04 :(Ojalá hubiera sido así de fácil. Pero, de nuevo, mi camino nos permite utilizar Trac como subdirectorio también. Gracias por la entrada. –

+0

Sí , la única diferencia son los hosts virtuales nombrados. No puedo probar con ellos porque estoy haciendo estas pruebas en mi computadora portátil con una instalación de Apache muy básica. Espero haber sido útil :) –

+0

Podrías agregar algunos nombres en su archivo de hosts;) pero gracias de todos modos, estoy perplejo de por qué no me funcionaría, esta fue esencialmente mi primera configuración que ha pegado aquí, solo con vhosts con nombre. –

1

Ok, creo que hemos encontrado a quién culpar: hosts virtuales denominadas :)

Con esta configuración:

<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> 

cuando funciono con el comando svn ls http://dave.test Tengo este error:

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

Aparentemente, hay un problema cuando uno intenta habilitar mod_dav_svn en el directorio raíz de un host virtual con nombre ...

+0

He tenido ese espectáculo que también es feo. Realmente no sé qué causa el problema en absoluto. –

0

Gracias por esto, finalmente lo he conseguido trabajando con VirtualHost debido a sus comentarios.

<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> 

como se muestra encontré que es probable que desee añadir también:

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

Con el fin de atrapar http://svn.example.com/svn sin el final /.

Nige.

+0

Tenga en cuenta que Nigel más tarde agregó que esto en realidad no funciona (Cuando va a cometer, etc.) –

0

DocumentRoot "/ usr/local/apache/htdocs/ForSvn" ServerName xxx.xxx ServerAdmin xxx ErrorLog "/ usr// apache/logs/xxx-error_log local" 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> 

y funciona bien conmigo. Gracias por esto.

2

encontrado esto en /etc/apache2/conf.d/subversion.conf (necesidad de asignar los documentos de error a los valores predeterminados):

<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> 

Después lo he hecho todo lo que comenzó a trabajar como se esperaba.

+0

Todavía no puedo hacer que esto funcione: el URI no contiene el nombre de un repositorio. [403, # 190001] –

+1

perfecto, la RESPUESTA ACTUAL CORRECTA – AbiusX

+0

Tuve que poner esto * dentro * de ' ...' –

Cuestiones relacionadas