web-dev-qa-db-fra.com

Règles de réécriture Apache pour le poste de travail et le serveur de développement

Des développeurs modifient des pages de plusieurs sites sur une pile WAMP, puis les téléchargent sur les serveurs publics exécutant des piles LAMP. Nous en sommes assez satisfaits, mais nous avons ce petit inconvénient: nous ne pouvons pas utiliser les mêmes fichiers .htaccess dans les environnements de développement et de production. Sur les sites publics, le dossier source est mappé sur http://foo.com, http://bar.com, etc. Sur le poste de travail du développeur, les dossiers source sont mappés sur http://localhost/foo, http://localhost/bar, etc. Cela signifie que j'ai besoin de RewriteBase / pour les serveurs publics, tandis que chaque site du poste de travail du développeur utilise RewriteBase /foo/, RewriteBase /bar/ ou peu importe.

Est-il possible de spécifier le RewriteBase par rapport au fichier .htaccess? Avez-vous d'autres idées pour rendre mes règles de réécriture plus portables?

Si vous êtes curieux, j'utilise des règles de réécriture pour rediriger vers le code de routage CakePHP, donc la règle ressemble à ceci:

RewriteRule ^(.*)$ cake_main.php?url=$1 [QSA,L]

Si je n'utilise pas de RewriteBase of /foo/ sur le poste de travail du développeur, il sera alors réécrit sur /cake_main.php au lieu de /foo/cake_main.php.

7
Don Kirkby

Ma solution à ce problème n’a pas été de bousiller les règles de réécriture, mais d’ajouter des domaines/hôtes locaux séparés avec de faux TLD à mon PC.

Vous pouvez le faire en modifiant le fichier C:\Windows\System32\drivers\etc\hosts

Sachez que sous Windows 7 (et peut-être Vista), vous devez exécuter votre éditeur de texte en tant qu’administrateur pour pouvoir éditer correctement ce fichier.

Vous pouvez ajouter des hôtes en utilisant des lignes qui ressemblent à:

127.0.0.2       www.mysite.local
127.0.0.3       www.myothersite.local

Une fois que ceux-ci sont en place, vous pouvez configurer Apache pour ces noms de domaine et vous serez prêt à partir.

Bien sûr, cela ne fonctionne pas correctement pour tester d'autres machines du réseau local, mais si vous êtes dans cette situation, il peut être préférable d'utiliser un serveur DNS local ou d'affecter les hôtes à des adresses IP non portables locales et synchroniser les fichiers sur tous les PC.

4
JasonBirch