Je rencontre un problème avec les directives mod_vhost_alias
d'Apache et mod_rewrite
pour le routage de "jolies URL" avec un machine de développement local. Je sais que c'est possible, car mon fournisseur d'hébergement utilise une configuration similaire et n'a aucun problème. Toutefois, chaque fois que j'essaie sur ma machine locale, Apache renvoie une erreur 500 Internal Server, et les journaux indiquent trop de redirections internes.500 Erreur de serveur: boucle de réécriture infinie dans Apache 2.2.x avec mod_vhost_alias, VirtualDocumentRoot et mod_rewrite pour le routage/"jolies" URL
Normalement Terminé
Je suis généralement un procédé classique simple, lors de l'ajout de domaines à ma machine locale pour le développement:
- Créer un répertoire
/path/to/www/
nommé selon le domaine, à savoir:/path/to/www/example.local/
- Ajouter une entrée dans
/etc/hosts
pour le nouveau domaine, par exemple:127.0.0.1 example.local
- Ajouter une directive
VirtualHost
pour le nouveau domaine avec leDocumentRoot
ensemble à/path/to/www/example.local/pub/
- Redémarrez Apache
Le problème
J'ai récemment commencé à utiliser la directive VirtualDocumentRoot
fournie par mod_vhost_alias
pour nettoyer ma liste sans cesse croissante de VirtualHost
directives et me sauver les tracas de redémarrer Apache après chaque nouveau domaine:
CanonicalName Off
VirtualDocumentRoot /path/to/www/%0/pub/
Dans l'un des domaines, par exemple example.local
, je pourrais avoir les éléments suivants:
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-l
RewriteRule .* index.php/%0 [L]
C'est une typique « jolie URL »/modèle de routage pour la plupart des applications et des cadres modernes. Cependant, Apache entre dans une boucle de redirection infinie lorsque je tente de charger example.local/anything/that/should/work
dans mon navigateur.
Je permis au RewriteLog
de déterminer ce qui se passait, et a constaté que Apache exécutait les éléments suivants:
- supprimer le préfixe de répertoire (
/path/to/www/example.local/pub/
) à partir de l'URL - Process le
RewriteRules
normalement, comme prévu , générant/index.php/anything/that/should/work
- Prepend à nouveau le préfixe du répertoire, ce qui donne:
/path/to/www/example.local/pub/index.php/anything/that/should/work
- RECOMMENCER. (!!)
La question
Quelqu'un at-il vu d'autre ce comportement et formulé une solution pour cela? Sinon, quelqu'un peut-il voir une erreur flagrante dans ma configuration Apache que je pourrais manquer?
Je ne l'ai pas. Cependant, comme je l'ai mentionné ci-dessus, mon fournisseur d'hébergement utilise cette méthode pour fournir des domaines dans un environnement partagé, et aucun indicateur supplémentaire n'est nécessaire. Merci pour cette suggestion, et je vais essayer. –