redirectmatch examples conf apache mod-rewrite mod-alias

examples - redirect http apache



Reescribir un directorio Alias (2)

mod_alias SIEMPRE tiene prioridad sobre mod_rewrite. Nunca puede anular una directiva mod_alias con mod_rewrite.

La directiva AliasMatch puede ayudarlo en este caso.

Intento primero usar una carpeta Alias ​​para almacenar mis archivos de proyecto en una ubicación diferente a la de mi DocumentRoot , y luego ejecutar un mod_rewrite en esta solicitud. Sin embargo, no parece analizar el archivo .htaccess .

Este es el contenido de mi archivo Alias:

Alias /test F:/Path/To/Project <Directory F:/Path/To/Project> Order allow,deny Allow from all </Directory>

Este es mi archivo .htaccess :

Options +FollowSymlinks RewriteEngine on RewriteRule .* index.php [NC] [PT]

Cuando elimino el Alias ​​todo funciona bien.


Aquí hay una solución que puede abordar algunos escenarios en los que intenta usar alias y reescribir, pero no puede porque entran en conflicto.

Supongamos que su DocumentRoot para una aplicación en particular es /var/www/example.com/myapp , y tiene la siguiente estructura básica de directorio, donde las solicitudes públicas son para archivos en public (por ejemplo, un archivo css) o se enrutan a través de index.php .

myapp/ |- private_library/ |- private_file.php |- private_configs/ |- private_file.php |- public/ |- index.php |- css/ |- styles.css

El objetivo es servir contenido solo dentro de public_webroot , sin embargo, la URL debe ser example.com/myapp not example.com/myapp/public .

Lo siguiente puede parecer que debería funcionar:

DocumentRoot /var/www/example.com Alias /myapp /var/www/example.com/myapp/public <Directory /var/www/example.com/myapp/public> # (or in this dir''s .htaccess) RewriteEngine On RewriteBase /public RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?q=$1 [QSA,PT] </Directory>

Pero esto dará lugar a un ciclo infinito si solicita una URL para un archivo que no existe (es decir, uno que debe enrutarse a través de index.php ).

Una solución es no usar mod_alias, y en su lugar simplemente usar mod_rewrite en el directorio raíz de su aplicación, así:

DocumentRoot /var/www/example.com <Directory /var/www/example.com/myapp> # (or in this dir''s .htaccess) RewriteEngine On RewriteRule (.*) public/$1 [L] </Directory> <Directory /var/www/example.com/myapp/public> # (or in this dir''s .htaccess) RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?q=$1 [QSA,L] </Directory>

¡Y eso es todo!