Virtuelles Verzeichnis? oder ähnliches ...
Arabell
- php
Hallo,
habe mal davon gelesen, dass man dem Server vorgaukeln kann, dass es ein Verzeichnis gibt, welches eigentlich gar nicht vorhanden ist. Ein PHP-Script leitet die Anfrage dann auf eine beliebige URL weiter.
Würde das gerne für meine Domain nutzen, auf der ich viele Nutzer habe, die somit automatisch eine eigene Homepage hätte - ich kann nicht 100 Verzeichnisse anlegen bzw. ich müsste dann jeden Tag gucken ob ein neuer User da ist (Subdomains habe ich leider nicht).
Wie kriege ich sowas hin?
Evtl. mit einer .htaccess Datei, die bei Nichtfinden der Aufgerufenen URL ein PHP-Script startet, welches das Verzeichnnis (=Username) rausfiltert und dann über eine DB-Abfrage auf die zugrhörige URL weiterleitet.
Meint Ihr das wäre möglich?
Hat jemand einen Ansatzt oder was ähnliches?
Ganz liebe Grüße,
Anabell
Huhu Anabell
habe mal davon gelesen, dass man dem Server vorgaukeln kann, dass es ein Verzeichnis gibt, welches eigentlich gar nicht vorhanden ist.
Du meinst vermutlich das Apache Modul mod_rewrite.
http://httpd.apache.org/docs/mod/mod_rewrite.html
Viele Grüße
lulu
Hallo lulu,
Du meinst vermutlich das Apache Modul mod_rewrite.
eigentlich nicht - da ich keinen Zugriff auf den Apache habe :-(
Was ist mit meiner Idee? Wäre sowas denkbar?
Gruss, Anabell
Huhu Anabell
Du meinst vermutlich das Apache Modul mod_rewrite.
eigentlich nicht - da ich keinen Zugriff auf den Apache habe :-(
Brauchst Du ja auch nicht, falls das Modul vorhanden ist kannst Du es per .htaccess benutzen.
Das könnte z.B. so aussehen:
RewriteEngine on
RewriteBase /cache
RewriteRule ^(en|de)(/(.*)|$) index.php?uri=$2 [QSA]
In dem Beispiel werden Anfragen an die "Verzeichnisse" en und de
(die es gar nicht gibt) "umgebogen" auf ein Script
/cache/index.php
Die ursprünglich angefragte URL wird dabei als get-Parameter angehängt.
So ungefähr trifft das ja Deine Idee, oder?
Viele Grüße
lulu
Hallo,
das klingt ja gut - werde es gleich mal ausprobieren.
Wie es scheint, sollte das mit meinem Server laufen ...
In dem Beispiel werden Anfragen an die "Verzeichnisse" en und de
(die es gar nicht gibt) "umgebogen" auf ein Script
Jetzt wäre es nur noch gut, wenn ich die Verzeichnisse en und de nicht in der .htaccess angeben muss, sondern wenn automatisch alle Anfragen auf nicht vorhandenen Verzeichnisse auf ein Script "umgebogen" würden.
Kannst Du mir da auch nochmal helfen.
Das wäre wirklich supernett.
LG, Anabell
Hallo,
habs mal ausprobiert und die .htaccess in mein Startverzeichnis kopiert ... jetzt bekomme ich aber eine 403-Fehler ... was mache ich falsch?
Das ist der Inhalt der Datei:
RewriteEngine on
RewriteBase /redirect
RewriteRule ^(test|test2)(/(.*)|$) index.php?uri=$2 [QSA]
Huhu Anabell
Hallo,
habs mal ausprobiert und die .htaccess in mein Startverzeichnis kopiert ... jetzt bekomme ich aber eine 403-Fehler ... was mache ich falsch?
403, forbidden also.
Sorge dafür, das die URL an welche Du die Anfragen "umbiegen" willst auch funktioniert.
Probiere also mal direkt http://www.deinhost.de/redirect/index.php
aufzurufen.
Evtl. liegt da noch gar kein Skript?
Viele Grüße
lulu
Hallo,
habs so versucht:
RewriteEngine on
RewriteBase /cache
RewriteRule ^(en|de)(/(.*)|$) http://test.de/index.php?url=$2 [QSA]
Aber wieder klappts nicht ... was mache ich nur falsch?
Hoffe ich nerve zuviel ...
LG, Stefan
Huhu Anabell, oder Stefan?
Hallo,
habs so versucht:
RewriteEngine on
RewriteBase /cache
RewriteRule ^(en|de)(/(.*)|$) http://test.de/index.php?url=$2 [QSA]
Nein, so nicht.
Ich meinte, dass Du das Skript an welches Du die Anfragen schicken möchtest erstmal testest.
Also
1. lege in Deinem Webroot ein Verzeichnis "/cache" an.
(oder ein Name der Dir besser gefällt)
2. stecke ein Skript hinein z.B.
index.php
---------
<?php
echo 'Hello my name is brad majors';
?>
3. rufe das Skript direkt in Deinem Browser auf
also
http://www.meinhost.de/cache/index.php
4. Wenn das funktioniert, schreibe erstmal eine ganz einfache .htaccess, z.B.
RewriteEngine on
RewriteBase /cache
RewriteRule ^jupp index.php
5. Wenn Du jetzt in Deinem Browser
http://www.meinhost.de/jupp/wasauchimmer
http://www.meinhost.de/jupp.html
http://www.meinhost.de/juppitter/planet.html
o.ä. aufrufst sollte Dein Skript mit "hello my name usw. antworten.
6. Wenn das klappt, und nur dann, kann man das weiter verfeinern
Hoffe ich nerve zuviel ...
Noch nicht genug ;-)
Viele Grüße
lulu
Hi!
Habe ich jetzt alles so gemacht.
Leider kriege ich immer noch den 403 Fehler.
Was soll das ... ?
Nochmal zu meinenm Server ... kann das daran liegen?
Apache Version
Apache/1.3.23
Loaded Modules
mod_userdir, mod_ssl, mod_python, mod_php4, mod_perl, mod_setenvif, mod_so, mod_unique_id, mod_usertrack, mod_headers, mod_expires, mod_cern_meta, mod_proxy, mod_digest, mod_auth_db, mod_auth_dbm, mod_auth_anon, mod_auth, mod_access, mod_rewrite, mod_alias, mod_speling, mod_actions, mod_imap, mod_asis, mod_cgi, mod_dir, mod_autoindex, mod_include, mod_info, mod_status, mod_negotiation, mod_mime, mod_mime_magic, mod_log_referer, mod_log_agent, mod_log_config, mod_define, mod_env, mod_vhost_alias, mod_mmap_static, http_core
Das sollte doch laufen, oder ?
Tausend Dank,
Anabell
Huhu Anabell
Leider kriege ich immer noch den 403 Fehler.
Wann genau bekommst Du ihn?
Ggf. musst Du Deinem neu angelegten Verzeichnis noch Leserechte
einräumen?
Viele Grüße
lulu
Hi,
sobald ich die .htaccess in das Root-Verzeichnis lade,
kann ich keine Seite mehr öffnen und kriege über all den forbidden Fehler.
Lade ich dann eine leere .htaccess-Datei hoch funktioniert alles wieder ...
Ist irgendwie komisch ...
HILFE!!!!!!
Huhu Anabell
sobald ich die .htaccess in das Root-Verzeichnis lade,
kann ich keine Seite mehr öffnen und kriege über all den forbidden Fehler.Lade ich dann eine leere .htaccess-Datei hoch funktioniert alles wieder ...
Ist irgendwie komisch ...
Ja, das ist es.
Welche Rechte besitzt die .htaccess - Datei?
Da müssen evtl. noch Leserechte für Public gesetzt werden?
Ansonsten poste nochmal die vollständige .htaccess
Viele Grüße
lulu
Hallo Ihr beiden,
mit dem Zusatz "Options +FollowSymLinks" läuft es jetzt.
Meine .htaccess-Datei sieht jetzt so aus:
Options +FollowSymLinks
RewriteEngine on
RewriteBase /redirect
RewriteRule ^(name1|name2)(/(.*)|$) index.php?url=$2 [QSA]
Die entsprechende index.php so:
<?
echo $_GET["url"];
?>
Allerdings wird der Parameter 'url' nicht übergeben ... aber Ihr habt bestimmt ne Lösung :-)
Ich bin so froh und dankbar, dass Ihr mir helft.
Könnt Ihr mir dann auch noch sagen, wie die .htaccess-datei nicht nur die "nicht vorhandenen" Verzeichnis "name1" und "name2" auf das PHP-Script redirect/index.php umlenkt, sondern bei jedem Aufruf diesen umlenkt, sofern das Verzeichnis nicht vorhanden ist.
Die Überprüfung, ob ein User mit dem angefragten Verzeichnis besteht, soll dann die index.php mit Hilfe einer Datenbank übernehmen. Und eine entsprechende Meldung bzw. Weiterleitung generieren.
Noch einmal 1000 Dank.
Eure Anabell
Huhu Anabell
mit dem Zusatz "Options +FollowSymLinks" läuft es jetzt.
fein
Allerdings wird der Parameter 'url' nicht übergeben ... aber Ihr habt bestimmt ne Lösung :-)
RewriteRule ^(name1|name2)(/(.*)|$) index.php?url=$2 [QSA]
Beachte hierbei die Klammerpaare.
Diese werden fortlaufend (anhand der öffnenden Klammer) durchnummeriert und füllen die entsprechenden Variablen $1,$2 etc..
D.h. in obigem Beispiel
(name1|name2) => $1
(/(.*)|$) => $2
(.*) => $3
der Parameter url erhält den Inhalt aus $2.
Wenn Du
http://www.meinhost.de/name1
aufrufst matcht (name1|name2) das "name1"
da keine weiteren Zeichen folgen wird der zweiten Klammer nur das Zeilenende gematcht (/(.*)|$)
D.h. die Ausgabe bleibt leer.
Probier mal
http://www.meinhost.de/name1/a/b/c/index.html
jetzt sollte der Teil nach dem "name1" als Parameter url übergeben werden.
Ansonsten steht Dir i.d.R. auch die Server-Variable
$_SERVER['REQUEST_URI'] zur Verfügung.
Könnt Ihr mir dann auch noch sagen, wie die .htaccess-datei nicht nur die "nicht vorhandenen" Verzeichnis "name1" und "name2" auf das PHP-Script redirect/index.php umlenkt, sondern bei jedem Aufruf diesen umlenkt, sofern das Verzeichnis nicht vorhanden ist.
Dass könnte man z.B. so machen
RewriteRule ^(user/?)([a-zA-Z]*) index.php?name=$2 [QSA]
Dann landet alles was mit "user" beginnt bei Deinem Skript.
Bei "user" und "user/" bleibt die "Küche kalt" bzw.
der Get-Parameter "name" leer.
Aber bei
http://meinhost.de/user/peter/a/b/index.html
bekommst Du "peter" als GET-Parameter "name".
Viele Grüße
lulu
Liebe Lulu,
erstmal ganz viele Dank, Du hast mir sehr geholfen.
Habe noch zwei kleine (?) Fragen:
1. Kann ich das ganze auch für Subdomains nutzen? Habe meinen Admin mal gefragt und er meint er könnte mir Wildcard DNS (weiss nicht was das ist, aber es soll das sein, was ich brauche um einen Subdomain-Service einrichten zu können) freischalten. Kann ich dann irgendwie als Parameter das zu einem Script übergeben, was vor meiner Domain steht und das, was dahinter steht?
Ich stelle mir das so vor:
Meine Domain heißst z.B. http://www.meine-welt.de
Eine Subdomain könnte lauten http://rosa.meine-welt.de
Und eine Anfrage an die Subdomain könnte lauten http://rosa.meine-welt.de/bilder/index.html
Ist es möglich jetzt zum einen "rosa" und zum anderen "/bilder/index.html" in jeweils einer Variabel an eine PHP-Script zu übergeben, welches dann die Weiterleitung organisiert?
2.
Dass könnte man z.B. so machen
RewriteRule ^(user/?)([a-zA-Z]*) index.php?name=$2 [QSA]
Dann landet alles was mit "user" beginnt bei Deinem Skript.
Bei "user" und "user/" bleibt die "Küche kalt" bzw.
der Get-Parameter "name" leer.Aber bei
http://meinhost.de/user/peter/a/b/index.htmlbekommst Du "peter" als GET-Parameter "name".
Das klappt alles sowei - habe es noch so verändert:
RewriteRule ^(user/?)(/(.*)|$) index.php?url=$2 [QSA]
Kriegt man das noch so hin, dass man das "user" weglassen kann?
Also so: http://meinhost.de/peter/a/b/index.html
Vielen lieben Dank,
Anabell
Huhu Anabell
- Kann ich das ganze auch für Subdomains nutzen? Habe meinen Admin mal gefragt und er meint er könnte mir Wildcard DNS (weiss nicht was das ist, aber es soll das sein, was ich brauche um einen Subdomain-Service einrichten zu können) freischalten.
Ja das geht. Siehe dazu die Servervariablen
http://httpd.apache.org/docs/mod/mod_rewrite.html#RewriteCond
%{SERVER_NAME} könnte es tun.
Da musst Du halt ein wenig rumfummeln.
Bzw. google am besten mal wie es richtig geht.
Infos findest Du vor allem da
http://httpd.apache.org/docs/mod/mod_rewrite.html
Kriegt man das noch so hin, dass man das "user" weglassen kann?
Also so: http://meinhost.de/peter/a/b/index.html
Ja, z.B. so
RewriteRule !(^redirect) index.php [QSA]
Allerdings muss man dann die gewünschten Parameter per Skript aus der
URL dröseln, da wenn es kein match gibt es kein match gibt, also auch nichts übergeben werden kann.
Dabei hilft Dir sicherlich die PHP-Funktion parse_url.
Bedenke, dass Du ggf. weitere Verzeichnisse vom rewrite ausnehmen musst.
Z.B. gfx, bilder o.ä. je nachdem was Du da alles draufpackst.
Also z.B.
RewriteRule !(^redirect|gfx|js|css) index.php [QSA]
Insgesamt sind die Möglichkeiten sehr vielfältig.
Probier halt mal was aus.
Viele Grüße
lulu
Hallo,
sobald ich die .htaccess in das Root-Verzeichnis lade,
kann ich keine Seite mehr öffnen und kriege über all den forbidden Fehler.
Das sieht stark danach aus, dass FollowSymLinks nicht gesetzt ist. Ohne das funktioniert mod_rewrite nicht und alle Zugriffe liefern 403. Du kannst versuchen,
Options +FollowSymLinks
in deine .htaccess zu schreiben, vor den Rewrite-Befehlen. Wenn dann beim Zugriff ein Serverfehler kommt, kannst du mod_rewrite gar nicht benutzen, weil du die Options nicht hinreichend ändern darfst.
Mathias