2008-08-12 21 views
12

Estoy usando .htaccess y mod_rewrite para apuntar a los archivos que se encuentran detrás de DocumentRoot. Mi estructura de carpetas se parece a esto:Mod-Rewrite cargando archivos detrás de DocumentRoot

home/ 
    webroot/ 
    other_files/ 

Tengo un archivo .htaccess en Webroot con el siguiente contenido:

 
RewriteEngine on 
RewriteRule ^(.*)$ /home/other_files/$1 

Si intento acceder a http://example.com/file.html recibo el siguiente error:

The requested URL /home/other_files/file.html was not found on this server.

¿Es posible cargar archivos que están detrás de DocumentRoot? Si es así, ¿alguien puede señalarme en la dirección correcta?

Respuesta

11

creo que es necesario agregar una sección con

<Directory "/home/other_files"> 
    (options) 
</Directory> 

a la configuración del servidor Apache antes será capaz de servir nada de él. Por ejemplo, mi DocumentRoot es/var/www pero hay esta sección en el sitio de disposición por defecto:

Alias /doc/ "/usr/share/doc/" 
<Directory "/usr/share/doc/"> 
    Options Indexes MultiViews FollowSymLinks 
    AllowOverride None 
    Order deny,allow 
    Deny from all 
    Allow from 127.0.0.0/255.0.0.0 ::1/128 
</Directory> 

A continuación, puede volver a escribir una dirección URL para ir a/doc/y el servidor sabría dónde obtener el archivos de.

+0

buena respuesta! gracias –

+0

Probé Alias ​​a un directorio fuera de DocumentRoot sin una sección y funcionó ... – Pere

0

Para que sepan qué esa regla no funciona:

La razón por la que no es capaz de reescribir a /home/other\_files/file.html es que mod_rewrite está analizando la ruta como /home/webroot/home/other\_files/file.html ya que desde el punto de vista del mod_rewrite de barra precedente es equivalente a su raíz de documento de /home/webroot.

Ryan Ahearn's suggestion es decente, y es probable que la ruta que desea ir.

0

El crédito va para Ryan Aheam, pero voy a explicarlo. Soy un principiante e incluso con la respuesta de Ryan tuve que experimentar con algunas cosas para obtener la sintaxis correcta.

Quería que mi DocumentRoot fuera mi directorio cakephp. Pero luego tuve un seguidor de errores de Mantis que solo era php regular y no estaba en el directorio cakephp. Los archivos a continuación tengo el siguiente funcionamiento.

http://www.my_website.com: servido por/var/www/cakephp

http://www.my_website.com/mantisbt: servido por/var/www/html/MantisBT

Archivo /etc/httpd/conf/httpd.conf

Alias /mantisbt/ "/var/www/html/mantisbt/"                   
<Directory "/var/www/html/">                       
    AllowOverride All                        
</Directory>                           

<VirtualHost *:80>                         
    ServerAdmin [email protected]_email.com                    
    DocumentRoot /var/www/cakephp                     
    ServerName my_website.com                      
    <Directory /var/www/cakephp/>                     
     AllowOverride All                       
    </Directory>                          
</VirtualHost> 

archivo /var/www/cakephp/.htaccess

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    RewriteRule ^mantisbt/?$ /mantisbt/ [NC,L] 
    RewriteRule ^$ webroot/ [L] 
    RewriteRule (.*) webroot/$1 [L] 
</IfModule> 
Cuestiones relacionadas