La règle suivante dans mon .htaccess
fonctionne parfaitement pour acheminer les appels à index.php
:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
Cependant, cela ne fonctionne pas lors de l'exécution sur une URL temporaire telle que http://example.com/~test/
.
Dans un tel cas, le fichier .htaccess doit se lire comme suit:
RewriteEngine On
RewriteBase /~test/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
Notez le supplément RewriteBase
.
Question: est-il possible d'écrire une règle dans .htaccess pour "détecter" s'il faut appliquer cette RewriteBase
?
La raison en est le .htaccess si la version est contrôlée, et j'aimerais que cela fonctionne sur plusieurs installations.
Autant que je sache, il n’existe aucun moyen fiable de détecter ce que la RewriteBase
devrait être. S'il y en avait, il n'y aurait aucun besoin de le kluge que RewriteBase
est , car mod_rewrite pourrait simplement détecter automatiquement la base correcte.
En essayant la même chose, et lors de ma recherche, j’ai trouvé que le fichier .htaccess
du framework _ de symfony2 le faisait au moins de la manière indiquée dans le fichier. J'ai essayé de l'utiliser dans ma propre configuration mais cela n'a pas fonctionné. Peut-être que cela vous aidera d'une certaine manière.
# Determine the RewriteBase automatically and set it as environment variable.
# If you are using Apache aliases to do mass virtual hosting or installed the
# project in a subdirectory, the base path will be prepended to allow proper
# resolution of the app.php file and to redirect to the correct URI. It will
# work in environments without path prefix as well, providing a safe, one-size
# fits all solution. But as you do not need it in this case, you can comment
# the following 2 lines to eliminate the overhead.
RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
RewriteRule ^(.*) - [E=BASE:%1]