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!