Réécrire un répertoire Alias

J’essaie d’abord d’utiliser un dossier Alias ​​pour stocker mes fichiers de projet dans un emplacement différent de mon DocumentRoot , puis d’exécuter un mod_rewrite sur cette demande. Cependant, il ne semble pas parsingr le fichier .htaccess .

Ceci est le contenu de mon fichier Alias:

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

Ceci est mon fichier .htaccess :

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

Lorsque je supprime l’alias, tout fonctionne bien.

mod_alias est TOUJOURS prioritaire sur mod_rewrite. Vous ne pouvez jamais remplacer une directive mod_alias avec mod_rewrite.

La directive AliasMatch peut vous aider dans ce cas.

Voici une solution qui peut traiter certains scénarios dans lesquels vous essayez d’utiliser des alias et de réécrire, mais pas parce qu’ils sont en conflit.

Supposons que votre DocumentRoot pour une application particulière soit /var/www/example.com/myapp , et que vous ayez la structure de répertoire de base suivante, où les demandes publiques sont soit pour des fichiers public (par exemple, un fichier css), soit acheminées index.php .

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

L’objective est de ne servir que du contenu dans public_webroot , cependant, l’URL doit être example.com/myapp non example.com/myapp/public .

Les éléments suivants peuvent sembler fonctionner:

 DocumentRoot /var/www/example.com Alias /myapp /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]  

Mais cela conduira à une boucle infinie si vous demandez une URL pour un fichier qui n’existe pas (c’est-à-dire qui devrait être routé via index.php ).

Une solution consiste à ne pas utiliser mod_alias et à utiliser simplement mod_rewrite dans le répertoire racine de votre application, comme ceci:

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

Et c’est tout!