Pregunta

Estoy usando .htaccess y mod_rewrite para que apunten a los archivos que se encuentran detrás de la DocumentRoot.Mi estructura de carpetas se parece a esto:

home/
    webroot/
    other_files/

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

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

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

La dirección URL solicitada home/other_files/file.html no se encontró en este servidor.

Es incluso posible cargar archivos que están detrás de la DocumentRoot?Si es así, ¿alguien me apunte en la dirección correcta?

¿Fue útil?

Solución

Creo que usted necesita para agregar una sección con

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

para la configuración de su servidor antes de apache será capaz de servir nada de ella.Para un ejemplo, mi DocumentRoot /var/www, pero hay esta sección en el valor predeterminado disponible en el sitio:

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>

Entonces, usted puede reescribir una URL para acceder a /doc/ y el servidor sabe donde conseguir los archivos de.

Otros consejos

Solo para que lo sepan el por qué de que la regla no funciona:

La razón por la que no es capaz de reescribir a /home/other\_files/file.html es que mod_rewrite es el análisis de la ruta de acceso como /home/webroot/home/other\_files/file.html ya que desde el mod_rewrite el punto de vista de la anterior barra es equivelant a su raíz de los documentos de /home/webroot.

Ryan Ahearn sugerencia es una decente, y es probable que la ruta que desea ir.

El crédito va a Ryan Aheam, pero me voy a explicar.Soy un principiante y aún con Ryan respuesta que he tenido que experimentar con un par de cosas para obtener la sintaxis de la derecha.

Yo quería que mi DocumentRoot a ser mi cakephp directorio.Pero entonces tuve una Mantis Bug tracker que se acaba de regulares de php y no en la cakephp directorio.El los archivos de abajo tengo el siguiente trabajo.

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 me@my_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>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top