J'essaie d'écrire un ensemble de règles mod_rewrite permettant à mes utilisateurs d'utiliser un seul dossier pour faire du développement sur différents projets, et ne pas avoir à gaver avec l'ajout de Vhosts pour chaque projet.
Mon idée d'accomplir Cela, est de mettre en place un "Vhost global" pour chaque utilisateur qui a besoin de cette capacité (seulement 3-4), le Vhost serait quelque chose comme: .My-domain.com. De là, je souhaite promouvoir mes utilisateurs pour écrire du code comme s'il s'agissait d'un domaine et non dans un sous-dossier. Par exemple, si Bob travaillait sur un projet nommé «Gnome», j'aimerais que l'URL Bob (et toute autre personne sur notre réseau interne) se charge d'accéder à ce projet pour être: http://gnome.bob.my-domain.com . Mais, ce que j'aimerais que Apache soit fait, est reconnue que "Gnome" est un "projet" et caraper la demande de la demande, en interne, de bob.my-domain.com/gnome/.
Le code de réécriture MOD que j'ai est: p>
[rid#838dc88/initial] (3) [perdir /home/bob/http/] strip per-dir prefix: /home/bob/http/index.html -> index.html [rid#838dc88/initial] (3) [perdir /home/bob/http/] applying pattern '^(.*)$' to uri 'index.html' [rid#838dc88/initial] (4) [perdir /home/bob/http/] RewriteCond: input='gnome.bob.my-domain.com' pattern='^([^.]+)\.bob\.my-domain\.com' => matched [rid#838dc88/initial] (4) [perdir /home/bob/http/] RewriteCond: input='/index.html' pattern='!^/%1.*' => matched [rid#838dc88/initial] (2) [perdir /home/bob/http/] rewrite 'index.html' -> '/gnome/index.html' [rid#838dc88/initial] (1) [perdir /home/bob/http/] internal redirect with /gnome/index.html [INTERNAL REDIRECT] [rid#8392f30/initial/redir#1] (3) [perdir /home/bob/http/] strip per-dir prefix: /home/bob/http/gnome/index.html -> gnome/index.html [rid#8392f30/initial/redir#1] (3) [perdir /home/bob/http/] applying pattern '^(.*)$' to uri 'gnome/index.html' [rid#8392f30/initial/redir#1] (4) [perdir /home/bob/http/] RewriteCond: input='gnome.bob.my-domain.com' pattern='^([^\.]+)\.bob\.my-domain\.com' => matched [rid#8392f30/initial/redir#1] (4) [perdir /home/bob/http/] RewriteCond: input='/gnome/index.html' pattern='!^/%1.*' => matched [rid#8392f30/initial/redir#1] (2) [perdir /home/bob/http/] rewrite 'gnome/index.html' -> '/gnome/gnome/index.html' [rid#8392f30/initial/redir#1] (1) [perdir /home/bob/http/] internal redirect with /gnome/gnome/index.html [INTERNAL REDIRECT] [rid#8397970/initial/redir#2] (3) [perdir /home/bob/http/] add path info postfix: /home/bob/http/gnome/gnome -> /home/bob/http/gnome/gnome/index.html
4 Réponses :
Vous avez dit "carte en interne" - ne voulez pas utiliser de redirection? p> Utilisez-vous le même virtualhost pour Avez-vous pensé à créer un serveuralias pour p>
Voici une version approximative que vous pourriez modifier pour travailler. Il capturera le sous-domaine et l'URL demandée et fera rediriger le domaine principal avec le sous-domaine comme première partie du chemin, suivi du chemin demandé, suivi de la chaîne de requête. P> gnome.bob.mysite.com code> et
bob.mysite.com code> p>
*. BOB.MYSITE.COM ? p>
ServerName www.mysite.com
ServerAlias *.mysite.com
RewriteCond %{HTTP_HOST} ^([a-zA-Z0-9-]+)\\.mysite.com$
RewriteRule ^/(.*) http://www.mysite.com/%1/$1 [R=301,L]',
Je veux absolument une redirection interne. L'ensemble de cela est de pouvoir utiliser des chemins absolus sur des liens, CSS, IMG SRCS, etc. Il y a / sera un hôte virtuel pour
Avez-vous essayé d'utiliser une autre règle de réécriture pour traiter celui-ci avant cela? Mais je pense que votre plus grand problème est le fait que votre serveur ne comprend pas qu'il est servi sous un Nom différent. p> Il pense qu'il est en cours d'exécution dans le gnome / gnome tandis que les choses du navigateur utilisées dans le répertoire /. Donc, toute URL relative que vous allez causer des problèmes. P> Ce dont vous avez besoin est un filtre qui exécutera toutes les URL de votre page via un processeur et les modifiera de / gnome / à / à / à /.<< p> p>
L'idée est de décourager les URL relatives, mais sous cette structure, ils devraient également travailler.
En outre, je suis assez sûr que l'hôte HTTP n'est pas utilisé dans la rédregle, juste l'URI
Vous voudrez peut-être vérifier
http: //httpd.apache .org / docs / 2.2 / vhosts / masse.html p>
Il traite du problème de la documentation à laquelle vous connaissez. p>
règle va quelque chose comme ça P>
VirtualDocumentRoot /var/www/%1/
Après quelques années d'ignorer ce problème et de revenir à des points à différents endroits, j'ai enfin trouvé une solution viable. Ce que j'ai trouvé était que les références de retour pour le précédent Les directives ci-dessus prépendent le sous-domaine correspondant à la 1er Cela semble beaucoup plus déroutant que ce qu'il n'en est vraiment, et je ne peux pas prendre le crédit pour découvrir la réponse. J'ai trouvé la réponse comme une réponse à une autre question ici, % N BACKREFERATION INS REWRITECOND . Merci à Jon Lin pour répondre à cette question, et inconnue de lui, ma question aussi! P> p> Réécritecond code> Les instructions ne sont pas disponibles dans le paramètre ConditionPattern des réédérations futures. Si vous souhaitez utiliser une référence arrière à partir d'une directive précédente
Rewritecond code>, vous ne pouvez l'utiliser que dans le paramètre teststring. P>
réécritecond code> directive sur le demandeur, délimité par
:: code>. Ce que nous faisons alors dans la chaîne de test code> Rewritecond code> (regex) est relancement du nom du sous-domaine, puis vérifiez que notre demande réel ne commence pas avec ce sous-domaine en tant que dossier utilisant Une référence arrière dans la même regex. P>
Juste une note que j'ai dû supprimer la fuite / sur la deuxième réécriture pour le faire fonctionner correctement pour moi. J'ai pu charger mon URL avec elle (une installation de la galerie3), mais les ressources CSS ne se chargeaient pas correctement. Enlever la barre oblique de fin corrigée. On dirait que c'était fini avec // dans l'URL avec elle là-bas.
Ajout de plus d'informations des journaux de réécriture, j'espère que quelqu'un a essayé cela avant, ou a une contribution sur la façon dont je peux le faire! Merci gars (et gals)