Próbuję napisać zestaw reguł mod_rewrite, które pozwalają moim użytkownikom wykorzystać jeden folder do robienia projektów na różnych projektach i nie muszą zmywać z dodawaniem vhostów dla każdego projektu.Apache mod_rewrite subdomena do podfolderu (poprzez wewnętrzne przekierowanie)
Mój pomysł, aby to osiągnąć, polega na skonfigurowaniu "Global VHost" dla każdego użytkownika, który potrzebuje tej umiejętności (tylko 3-4), a vhost będzie podobny do: .my-domain.com. Stamtąd chcę promować moich użytkowników, aby pisali kod tak, jakby był w domenie, a nie w podkatalogu. Na przykład, jeśli Bob pracował nad projektem o nazwie "gnome", chciałbym, aby adres URL boba (i każdego innego w naszej wewnętrznej sieci) został załadowany, aby uzyskać ten projekt: http://gnome.bob.my-domain.com. Ale chciałbym, żeby Apache to zrobił, rozpoznaje, że "gnome" jest "projektem", a więc wewnętrznie zamapuje żądanie na bob.my-domain.com/gnome/.
Mam to, co myślałem, że zadziała, i to całkiem proste, ale ... to nie działa! Żądanie przechodzi w nieskończoną pętlę i utrzymuje prefiksację subdomeny na ponownie zapisanym identyfikatorze URI żądania.
Mod przepisać kod mam jest:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^([^.]+)\.bob\.my-domain\.com
RewriteCond %{REQUEST_URI} !^/%1.*
RewriteRule ^(.*)$ /%1/$1 [L]
Mam googled się trochę na ten temat, ale mam jeszcze znaleźć żadnych realnych rozwiązań, które działają. Czy ktoś próbował tego - a może ktoś ma lepszy pomysł? Nie wymaga to tworzenia wirtualnego hosta dla każdego projektu (mam projektantów). Sądzę, że wszyscy zgodziliby się, że projektant nie powinien tworzyć wirtualnych hostów.)
Dzięki!
Oto urywek z 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
To jest tylko fragment, istnieje kilka 10s lub 100 albo więc linie apache zasadzie przepisywanie /gnome/index.html do/gnome/gnome /gnome/gnome/gnome/index.html itp przed apache uderza swój limit przepisywania, rezygnuje i rzuca błąd 500
Dodano więcej informacji z dzienników do przepisywania, mam nadzieję, że ktoś próbował już to wcześniej lub ma jakiś wkład w to, jak mogę to zrobić! Dzięki chłopaki (i dziewczęta) –