rewriterule rewritecond mod_rewrite htaccess ejemplos .htaccess mod-rewrite

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