Sto provando a scrivere un set di regole mod_rewrite che consentono ai miei utenti di utilizzare una singola cartella per eseguire lo sviluppo su progetti diversi, e non si deve confondere con l'aggiunta di vhosts per ogni singolo progetto.Apache mod_rewrite un sottodominio in una sottocartella (tramite reindirizzamento interno)
La mia idea di realizzare questo, è di impostare un "Global VHost" per ogni singolo utente che ha bisogno di questa capacità (solo 3-4), il vhost sarebbe qualcosa del tipo: .my-domain.com. Da lì, voglio promuovere i miei utenti a scrivere codice come se si trovasse su un dominio e non in una sottocartella. Ad esempio, se bob stava lavorando su un progetto chiamato 'gnome', mi piacerebbe che l'URL bob (e chiunque altro sulla nostra rete interna) carichi per arrivare a questo progetto fosse: http://gnome.bob.my-domain.com. Ma, quello che vorrei fare Apache, è riconoscere che "gnome" è un "progetto" e quindi mappare la richiesta, internamente, a bob.my-domain.com/gnome/.
Ho quello che pensavo avrebbe funzionato, ed è abbastanza semplice, ma..it non funziona! La richiesta entra in un ciclo infinito e mantiene il prefisso del dominio secondario sull'URI della richiesta riscritta.
Il codice mod rewrite che ho è:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^([^.]+)\.bob\.my-domain\.com
RewriteCond %{REQUEST_URI} !^/%1.*
RewriteRule ^(.*)$ /%1/$1 [L]
Googled intorno a un po 'di questo, ma ho ancora trovare eventuali soluzioni reali che funzionano. Qualcuno ha provato questo - o forse, qualcuno ha un'idea migliore? Uno che non implica la creazione di un host virtuale per ogni progetto (ho designer ... Credo che tutti sarebbero d'accordo sul fatto che un designer non dovrebbe creare host virtuali ..)
Grazie!
Ecco un frammento della rewrite_log:
[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
Questo è solo un frammento, ci sono un paio di 10s o 100 o giù di lì le linee di apache fondamentalmente riscrittura /gnome/index.html a/gnome/gnome /gnome/gnome/gnome/index.html, ecc prima di apache raggiunge il limite di riscrittura, si arrende, e getta errore 500
Aggiunte ulteriori informazioni dai registri di riscrittura, si spera che qualcuno abbia già provato questo o abbia qualche input su come posso ottenere questo risultato! Grazie ragazzi (e ragazze) –