.htaccess - rewritecond - Mod-Rewrite cargando archivos detrás del DocumentRoot
rewriterule htaccess apache (3)
Creo que debes agregar una sección con
<Directory "/home/other_files">
(options)
</Directory>
a la configuración de su servidor antes de que apache pueda servirle nada. Por ejemplo, mi DocumentRoot es / var / www pero hay esta sección en el sitio disponible 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>
Luego puede volver a escribir una URL para ir a / doc / y el servidor sabrá de dónde obtener los archivos.
Estoy usando .htaccess
y mod_rewrite
para señalar a los archivos que se encuentran detrás de DocumentRoot. Mi estructura de carpetas tiene este aspecto:
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:
La URL /home/other_files/file.html solicitada no se encontró en este servidor.
¿Es posible cargar archivos que están detrás de DocumentRoot? Si es así, ¿alguien puede señalarme en la dirección correcta?
El mérito es de 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 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>
Para que sepa por qué esa regla no funciona:
La razón por la que no puede volver a escribir en /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 de mod_rewrite barra anterior es equivalente a su raíz de documento de /home/webroot
.
La sugerencia de Ryan Ahearn es decente, y es probable que sea la ruta que quieres seguir.