mod_rewrite - Subdomain simulieren
Matze
- webserver
Hallo,
ich programmiere eine Plattform bei der angemeldete Benutzer über eine "Subdomain" (gleich Benutzername) verschiedene Daten veröffentlichen können.
Die "Subdomain" soll mit mod_rewrite auf eine andere Datei weiter leiten, die dann für die Ausgabe der Daten verantwortlich ist.
Bislang spiele ich das Problem erstmal mit XAMPP durch.
Ich dachte mir, die einfachste Regel sollte so aussehen:
RewriteRule (.*).localhost foo.php [C]
Damit wollte ich alles was als subdomain von localhost angegeben wird auf die Testdatei umleiten.
Wenn ich es so versuche, versucht der Firefox aber eine www-Domain (.*) (was man halt eingegeben hat) mit dem Verzeichniss "localhost" zu öffnen.
Wie müsste die Regel also aussehen, damit localhost und nicht (.*) als "Domain" akzeptiert wird?
Ich hoffe ich konnte mein Problem ordentlich beschreiben.
Danke für Eure Hilfe!
Grüße, Matze
Hallo noch einmal!
Ich habe weiter versucht eine passende Lösung zu finden, leider ohne Erfolg.
Mein aktueller Stand sieht so aus:
RewriteEngine on
RewriteCond %(REQUEST_URI) (.*).localhost$ [NC]
RewriteRule ^(.*).localhost$ foo.php [R=301,L]
Auch hier dachte ich, ich könnte alles was subdomain.localhost ist auf foo.php umleiten. Leider erfolglos.
Könnte mir jemand helfen eine Regel zu schreiben, die sämtliche Subdomainaufrufe auf eine Datei weiter leitet?
Danke und Grüße,
Matze
Ich habe gerade gelesen, dass man den XAMPP erst noch konfigurieren muss, damit er Subdomains akzeptiert. Also muss ich das wohl vorher machen.
Leider finde ich keine Anleitung dazu, nur irgendwas von V-Hosts. Genau das will ich aber nicht, ich will es ja nur Subdomains auf eine Datei umleiten.
Könnte mir also bitte jemand Hilfestellung bei den Einstellungen des Apache geben, so dass ich weiß ob meine versuchten Weiterleitungen überhaupt Sinn ergeben?
Dank nochmal und Grüße,
Matze
Hellihello
mag sein, dass Du deinem Server erstmal sagen musst, dass er alle *.localhosts irgendwohin schiebt. Sonst ignoriert er die einfach. Dazu brauchst Du m.W. mindest einen Vhosts. Der ist u.U. für "localhost" schon konfiguriert? Vielleicht aber genügt auch schon ein Eintrag in system32\driver\etc\hosts (dort, wo auch die IP für "localhost" steht). Wenn der Vhost für 127.0.0.1 oder * dann für ServerName o. ServerAlias mit * konfiguriert ist, wäre der Weg wohl frei.
Dann kannst Du alles in ein Verzeichnis leiten, und dort mit der index.php die und var_dump($_SERVER) mal schauen, welche Servervars dir weiterhelfen.
Dank und Gruß,
Hellihello
mag sein, dass Du deinem Server erstmal sagen musst, dass er alle *.localhosts irgendwohin schiebt. Sonst ignoriert er die einfach. Dazu brauchst Du m.W. mindest einen Vhosts. Der ist u.U. für "localhost" schon konfiguriert?
Ich denke nicht. muss ich das in der httpd.conf eintragen? Und was müsste ich da eintragen?
Vielleicht aber genügt auch schon ein Eintrag in system32\driver\etc\hosts (dort, wo auch die IP für "localhost" steht). Wenn der Vhost für 127.0.0.1 oder * dann für ServerName o. ServerAlias mit * konfiguriert ist, wäre der Weg wohl frei.
Also da steht bei mir nur:
127.0.0.1 localhost
127.0.0.1 böse adresse
127.0.0.1 böse adresse
......... ............
......... ............
Was müsste ich da eintragen? Also eine Subdomain namens * als Wildcard und mit der IP 127.0.0.1? Also nur eine neue Zeile 127.0.0.1 *.localhost ? Wenn nicht, kannst du mir dabei helfen? ;)
Dann kannst Du alles in ein Verzeichnis leiten, und dort mit der index.php die und var_dump($_SERVER) mal schauen, welche Servervars dir weiterhelfen.
Öähm REQUEST_URI müsste mir doch reichen oder? Also:
"Prüfe ob vor der Domain (also 'localhost') etwas steht - *.localhost"
RewriteCond %(REQUEST_URI) ^(.*).localhost$ [NC]
"Im Fall das jemand *.localhost anfordert leite um auf foo.php im root-Verzeichniss localhost"
RewriteRule ^(.*).localhost$ foo.php [R=301,L]
Sollte so klappen oder?
Dank und Gruß,
Ich habe zu danken.
Grüße, Matze
Hellihello
Ich denke nicht. muss ich das in der httpd.conf eintragen? Und was müsste ich da eintragen?
Erstmal muss dich deine etc\hosts ja dahin lassen, würde ich meinen.
Vielleicht aber genügt auch schon ein Eintrag in system32\driver\etc\hosts (dort, wo auch die IP für "localhost" steht). Wenn der Vhost für 127.0.0.1 oder * dann für ServerName o. ServerAlias mit * konfiguriert ist, wäre der Weg wohl frei.
Also da steht bei mir nur:
127.0.0.1 localhost
Start of entries inserted by Spybot - Search & Destroy
127.0.0.1 böse adresse
127.0.0.1 böse adresse
......... ............
......... ............End of entries inserted by Spybot - Search & Destroy
127.0.0.1 test.localhost
als ersten Test mal probieren.
Und mal schauen, was dann dein xampp antwortet.
Was müsste ich da eintragen? Also eine Subdomain namens * als Wildcard und mit der IP 127.0.0.1? Also nur eine neue Zeile 127.0.0.1 *.localhost ? Wenn nicht, kannst du mir dabei helfen? ;)
Wildcard wäre m.E. schritt 2.
Dann kannst Du alles in ein Verzeichnis leiten, und dort mit der index.php die und var_dump($_SERVER) mal schauen, welche Servervars dir weiterhelfen.
Öähm REQUEST_URI müsste mir doch reichen oder?
Na PHPs $_SERVER meinte ich.
Also:
"Prüfe ob vor der Domain (also 'localhost') etwas steht - *.localhost"
RewriteCond %(REQUEST_URI) ^(.*).localhost$ [NC]
"Im Fall das jemand *.localhost anfordert leite um auf foo.php im root-Verzeichniss localhost"
RewriteRule ^(.*).localhost$ foo.php [R=301,L]Sollte so klappen oder?
Naja, wenn du soweit kommst. Mein virtueller Server leitet nicht per Vhost konfigurierte Sub.Domains in den default-Ordner.
Dank und Gruß,
Hallo!
127.0.0.1 test.localhost
als ersten Test mal probieren.
Und mal schauen, was dann dein xampp antwortet.
Sehr schön, jetzt schickt mich der XAMPP wenigstens nicht mehr ins Netz, sondern akzeptiert den Teil als Subdomain. Es wird allerdings immer die index aus localhost, nicht die angegebene Datei foo.php.
Wildcard wäre m.E. schritt 2.
Sehr schön, das wäre nämlich mein Hauptproblem :)
Dann kannst Du alles in ein Verzeichnis leiten, und dort mit der index.php die und var_dump($_SERVER) mal schauen, welche Servervars dir weiterhelfen.
Also da stehn so ziemlich alle. Sogar mein Passwort oÔ XAMPP Standardinstallation oh mein Gott.
Naja, wenn du soweit kommst. Mein virtueller Server leitet nicht per Vhost konfigurierte Sub.Domains in den default-Ordner.
Genau das will ich auch, bzw in einen passenden Ordner zur Subdomain. Nur, dass ich keine echte Subdomain brauch. Ich wüsste auch gar nicht wo ich jetzt Daten lagern kann, die darüber erreichbar sind ^^
Dank und Gruß,
Ich danke wieder.
Grüße, Matze
Hellihello
Wildcard wäre m.E. schritt 2.
Sehr schön, das wäre nämlich mein Hauptproblem :)
s. anderes Posting. Ich weiß nicht, wie Windows das macht. Schritt eins bleibt die Weiterleitung durch die "etc\hosts"
Genau das will ich auch, bzw in einen passenden Ordner zur Subdomain. Nur, dass ich keine echte Subdomain brauch. Ich wüsste auch gar nicht wo ich jetzt Daten lagern kann, die darüber erreichbar sind ^^
Eine Subdomain ist "test.localhost". In meiner httpd.conf von xampp ist die DocumentRoot erstmal für _alle_ Anfragen definiert.
Ganz unten findet sich auskommentiert:
#<VirtualHost *>
# ServerAdmin webmaster@dummy-host.example.com
# DocumentRoot /www/docs/dummy-host.example.com
# ServerName dummy-host.example.com
# ErrorLog logs/dummy-host.example.com-error_log
# CustomLog logs/dummy-host.example.com-access_log common
#</VirtualHost>
Dort kannst Du definieren (in dem Fall auch mit Wildcard, welche Subdomains von "localhost" in welches Verzeichnis geleitet werden sollen.
Dank und Gruß,
Hallo frankx!
Eine Subdomain ist "test.localhost". In meiner httpd.conf von xampp ist die DocumentRoot erstmal für _alle_ Anfragen definiert.
Ganz unten findet sich auskommentiert:
#<VirtualHost *>
# ServerAdmin webmaster@dummy-host.example.com
# DocumentRoot /www/docs/dummy-host.example.com
# ServerName dummy-host.example.com
# ErrorLog logs/dummy-host.example.com-error_log
# CustomLog logs/dummy-host.example.com-access_log common
#</VirtualHost>
Obwohl es sicherlich nicht falsch ist, die VHosts direkt in der httpd.conf zu definieren, bringt XAMPP eine httpd-vhosts.conf, die man mit VHosts-Definitionen auch füllen kann. Zu finden in /xampp/apache/conf/extra. Dort habe ich für den lokalen Einsatz alle VHosts stehen.
Viele Grüße aus Frankfurt/Main,
Patrick
Hellihello Patrick,
Obwohl es sicherlich nicht falsch ist, die VHosts direkt in der httpd.conf zu definieren, bringt XAMPP eine httpd-vhosts.conf, die man mit VHosts-Definitionen auch füllen kann. Zu finden in /xampp/apache/conf/extra. Dort habe ich für den lokalen Einsatz alle VHosts stehen.
Und schaffst Du es, die "hosts" zu überreden, Subdomains mit Wildcard zu verwalten? "*.localhost" ?
Dank und Gruß,
Moin!
Und schaffst Du es, die "hosts" zu überreden, Subdomains mit Wildcard zu verwalten? "*.localhost" ?
Nein, das ist technisch nicht vorgesehen und funktioniert nicht.
Wenn man keinen DNS hat, den man konfiguriert, auf beliebige Subdomains immer mit der gleichen IP zu antworten, bleibt als Alternative mit der hosts-Datei nur, dort alle erlaubten Subdomains explizit aufzuführen.
- Sven Rautenberg
Hallo Sven!
Wenn man keinen DNS hat, den man konfiguriert, auf beliebige Subdomains immer mit der gleichen IP zu antworten, bleibt als Alternative mit der hosts-Datei nur, dort alle erlaubten Subdomains explizit aufzuführen.
*Autsch, das ist genau das, was ich befürchtet habe. Nun, ich habe noch einen Root-Server zur Verfügung an dem ich ein bisschen experimentieren kann.
Kannst du mir helfen, den so einzustellen, dass er tut was ich vorhabe?
Ich häng derzeit wieder an 2 Problemen. Problem 1: Wie schaff ich es Subdomain-XY in einen bestimmten Ordner zu leiten aber Domain soll weiterhin die index aufrufen. Alles was ich probiere, schickt mich jetzt in den erstellten Testordner :(
Danke euch!
Grüße, Matze
Sry und Problem 2 ist halt das Ausgangsproblem - die Wildcards.
Hallo frankx!
s. anderes Posting. Ich weiß nicht, wie Windows das macht. Schritt eins bleibt die Weiterleitung durch die "etc\hosts"
Was bleibt mir da übrig? Eine kleine Linuxdis. auf einer Partition installieren? Das wär ganz übel, weil ich von Linux absolut keine Ahnung habe. Ich wüsste nichtmal wie ich den XAMPP da installiere. Apache ist doch bei Linux schon bei oder?
Eine Subdomain ist "test.localhost". In meiner httpd.conf von xampp ist die DocumentRoot erstmal für _alle_ Anfragen definiert.
Wie bereits erwähnt gibt es dafür wohl die apache/conf/extra/httpd-vhosts.conf, da auch:
Ganz unten findet sich auskommentiert:
#<VirtualHost *>
# ServerAdmin webmaster@dummy-host.example.com
# DocumentRoot /www/docs/dummy-host.example.com
# ServerName dummy-host.example.com
# ErrorLog logs/dummy-host.example.com-error_log
# CustomLog logs/dummy-host.example.com-access_log common
#</VirtualHost>
Wie müsste das jetzt für meine Subdomain "test" aussehen? So?
<VirtualHost>
ServerAdmin webmaster@localhost
DocumentRoot /htdocs/test.localhost
ErrorLog logs/test.localhost-erro_log
CustomLog logs/test.localhost-access_log common
</VirtualHost>
Dort kannst Du definieren (in dem Fall auch mit Wildcard, welche Subdomains von "localhost" in welches Verzeichnis geleitet werden sollen.
Wie geht das mit der Wildcard? Wo müsste ich wie eintragen, dass alle Subdomains (also Wildcard) in ein bestimmtes Verzeichniss auf eine bestimmte Datei geleitet werden? Oder dreh ich mich grad im Kreis und das wäre wieder eine Einstellung in der etc\host?
Danke für deine Geduld!
Grüße, Matze
Hellihello
s. anderes Posting. Ich weiß nicht, wie Windows das macht. Schritt eins bleibt die Weiterleitung durch die "etc\hosts"
<VirtualHost>
ServerAdmin webmaster@localhost
DocumentRoot /htdocs/test.localhost
ErrorLog logs/test.localhost-erro_log
CustomLog logs/test.localhost-access_log common
</VirtualHost>
Wichtig ist ServerName und ServerAlias.
<VirtualHost *>
ServerName localhost
ServerAlias test.localhost
ServerAlias *.localhost
</VirtualHost>
Route doch erstmal den localhost in ein Testverzeichnis "/htdocs/test", um es zum Laufen zu bringen.
Das DocumentRoot-Verzeichnis sollte existieren (;-).
Dank und Gruß,
Hallo frankx!
Also den <VirtualHost> hab ich jetzt so eingetragen.
Route doch erstmal den localhost in ein Testverzeichnis "/htdocs/test", um es zum Laufen zu bringen.
Öähm wie meinen? Und wie mach ich das? *bitte nicht schlagen
Das DocumentRoot-Verzeichnis sollte existieren (;-).
Wird es ;)
Danke und Grüße, Matze
Hellihello
Also den <VirtualHost> hab ich jetzt so eingetragen.
Und, gehts?
Route doch erstmal den localhost in ein Testverzeichnis "/htdocs/test", um es zum Laufen zu bringen.
Öähm wie meinen? Und wie mach ich das? *bitte nicht schlagen
Na leite doch erstmal den localhost per VirtualHost-Anweisung zum Testen in ein Testverzeichnis, so meinte ich.
Das DocumentRoot-Verzeichnis sollte existieren (;-).
Wird es ;)
Sonst kriegst u.U. kryptische Fehler. Apache-Restart übrigens nicht vergessen, gelle?
Dank und Gruß,
Hallo frankx!
Und, gehts?
Keine Ahnung ob sich was geändert hat, es ging vorher genauso. Sagte ich ja bereits.
Die "Sub-Domain" test.localhost und die "Domain" localhost öffnen beide die index direkt im htdocs-Verzeichniss, also localhost. Jede andere Sub leitet der XAMPP um ins Internet.
Route doch erstmal den localhost in ein Testverzeichnis "/htdocs/test", um es zum Laufen zu bringen.
Öähm wie meinen? Und wie mach ich das? *bitte nicht schlagen
Na leite doch erstmal den localhost per VirtualHost-Anweisung zum Testen in ein Testverzeichnis, so meinte ich.
Ja und wie mach ich das? So meinte ich^^
Sonst kriegst u.U. kryptische Fehler. Apache-Restart übrigens nicht vergessen, gelle?
Hab das Verzeichniss "test" erstellt und eine phpinfo() als index drin. Apache ist neu gestartet.
In der htaccess steht jetzt übrigens keine rewriteRule mehr. Ich dachte das kommt später. War das richtig?
Danke und Grüße, Matze
Hellihello
Route doch erstmal den localhost in ein Testverzeichnis "/htdocs/test", um es zum Laufen zu bringen.
Öähm wie meinen? Und wie mach ich das? *bitte nicht schlagen
Na leite doch erstmal den localhost per VirtualHost-Anweisung zum Testen in ein Testverzeichnis, so meinte ich.
Ja und wie mach ich das? So meinte ich^^
httpd.conf:
<VirtualHost *>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot "/xampp/htdocs/localhost_subdomain_test"
ServerName subdomaintest.localhost
ServerAlias *.localhost
</VirtualHost>
hosts:
127.0.0.1 localhost *.localhost asdf.localhost subdomaintest.localhost xxx.localhost
lande ich mit subdomaintest.localhost und u.a. xxx.localhost in dem Verzeichnis "/xampp/htdocs/localhost_subdomain_test".
Dank und Gruß,
Hallo,
in meiner httpd-vhosts.conf steht jetzt
<VirtualHost *:80>
ServerAdmin admin@localhost
DocumentRoot "/xampp/htdocs/test"
ServerName test.localhost
ServerAlias *.localhost
</VirtualHost>
in der hosts:
127.0.0.1 localhost *.localhost test.localhost asdf.localhost xxx.localhost
Mit den angegebenen Adressen erreiche ich jetzt die index im Verzeichnis "test". Mit der könnte ich die aufgerufene Adresse jetzt auswerten und entsprechende Inhalte laden. Z.B.:
<?PHP
// wenn Sub-Domain nicht www ist lade Datei
if(Sub-Domain != "www") readfile('Sub-Domain'.html);
?>
Ich möchte aber, dass auch Wildcards berücksichtigt werden. Also
<?PHP
// wenn Sub-Domain nicht www ist und eine Datei zur Domain existiert
if(Sub-Domain != "www" && fileexists(Sub-Domain.".html")) {
// lade Datei
readfile('Sub-Domain'.html);
// sonst gib Fehler aus
} else {
echo "ERROR";
}
?>
Im Fall der zweiten Variante geh ich also davon aus, dass die Sub-Domains Wildcards sind und ich erst nach deren Aufruf eine passende Datei suchen oder das nicht vorhanden sein selbiger melden will.
Danke nochmals!
Grüße, Matze
Hellihello
<?PHP
// wenn Sub-Domain nicht www ist und eine Datei zur Domain existiert
if(Sub-Domain != "www" && fileexists(Sub-Domain.".html")) {
// lade Datei
readfile('Sub-Domain'.html);
// sonst gib Fehler aus
} else {
echo "ERROR";
}
?>
Dein Problem im Moment ist, dass Du in der "hosts" keine Wildcard definiert werden kann. Das ist sozusagen die Grenze diese Mini- oder Prä-Dns-Servers.
Wenn Dein Betriebssystem ggf. mit Hilfe eines DNS-Servers, \*.localhost an den Apache weiterreicht, ist es doch kein Problem, o.g. zu machen. Die Subdomain existiert doch als $\_SERVER["REQUEST\_URI"] ? in den Server-Vars. Die kannst Du doch dann zerlegen und erforschen bzw. abgleichen.
Dank und Gruß,
[frankx](http://community.de.selfhtml.org/visitenkarten/view.php?key=82)
--
[tryin to](http://sauer-ernst.de) [multitain](http://multitain.de) - Globus = Planet != Welt
Hellihello
Wenn Dein Betriebssystem ggf. mit Hilfe eines DNS-Servers, *.localhost an den Apache weiterreicht, ist es doch kein Problem, o.g. zu machen. Die Subdomain existiert doch als $_SERVER["REQUEST_URI"] ? in den Server-Vars. Die kannst Du doch dann zerlegen und erforschen bzw. abgleichen.
$_SERVER["HTTP_HOST"] wohl eher.
Dank und Gruß,
Hallo frankx!
Dein Problem im Moment ist, dass Du in der "hosts" keine Wildcard definiert werden kann. Das ist sozusagen die Grenze diese Mini- oder Prä-Dns-Servers.
Genau ;( Unter welchen Vorraussetzungen könnte ich das erreichen was ich will?
Wenn Dein Betriebssystem ggf. mit Hilfe eines DNS-Servers, *.localhost an den Apache weiterreicht, ist es doch kein Problem, o.g. zu machen. Die Subdomain existiert doch als $_SERVER["REQUEST_URI"] ? in den Server-Vars. Die kannst Du doch dann zerlegen und erforschen bzw. abgleichen.
Genau ;( Auch wenn du mir sehr weiter geholfen hast, steh ich immernoch vor dem selben Problem.
Ich hab, zugegeben, auch nicht ganz verstanden was die Änderungen in den Dateien etc/hosts, conf/extra/httpd-vhosts.conf bewirken.
Schwer zu verstehn oder ist es so schwer?
Oder sollte ich doch mal ne Linux-Dis auf die Platte magnetisieren?
Ich habe wieder zu danken!
Gruß, Matze
Hellihello
Erstmal muss dich deine etc\hosts ja dahin lassen, würde ich meinen.
Wildcard wäre m.E. schritt 2.
http://forum.de.selfhtml.org/archiv/2006/4/t127103/
geht nicht, muss ein dns-server her.
Dank und Gruß,
Hellihello
127.0.0.1 localhost
Start of entries inserted by Spybot - Search & Destroy
127.0.0.1 böse adresse
127.0.0.1 böse adresse
......... ............
......... ............End of entries inserted by Spybot - Search & Destroy
Bei mir jetzt:
127.0.0.1 localhost *.localhost asdf.localhost
asdf.localhost kommt bei xampp an.
irgendwas.localhost oder *.localhost nicht. da sucht mein browser nach der domain im netz.
Dank und Gruß,
Hallo noch einmal!
Ich habe im Ausgangspost gar nicht erwähnt, dass ich Versuche das Ganze auf einem XP Prof.-System zum laufen zu kriegen.
Ich habe mir jetzt <http://de.brothersoft.com/Simple-DNS-Plus-112341.html@Simple DNS Plus> herunter geladen und installiert. Somit müsste ich jetzt einen funktionierenden DNS-Server auf meinem System haben oder? Leider ist das Programm auf Englisch, also versteh ich grad nicht allzuviel von dem was das Programm eigentlich tut. Genau genommen versteh ich überhaupt nichts.
Könnte mir bitte jemand ein deutsches Programm oder Tool nennen womit ich einen eigenen DNS-Server einrichten und konfigurieren kann?
Danke für eure Geduld!
Grüße, Matze