mo_rewrite
Martin Hein
- webserver
Hallo Forum,
ich habe zum ersten Mal mit mod_rewrite rumprobiert und bin sogar
zu einem Ergebnis gekommen. Meine .htacccess liegt direkt im
DocumentRoot und sieht (auf eine Rule gekürzt) folgendermassen
aus:
.htaccess
---------------------------------------------------------------------
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteRule ^$ /_content/?site_id=1&%{QUERY_STRING}
RewriteRule ^Unsere_Leistungen/$ /_content/?site_id=3&%{QUERY_STRING}
---------------------------------------------------------------------
Damit funktioniert:
1.
Die Eingabe von: "http://sub.domain.net/"
führt zur Ausgabe von "http://sub.domain.net/_content/?site_id=1"
2.
Die Eingabe von: "http://sub.domain.net/Unsere_Leistungen/"
führt zur Ausgabe von "http://sub.domain.net/_content/?site_id=3"
alles wie gewünscht. Jetzt hab ich mal ganz naiv versucht, die
.htaccess nach "/_content/.htaccess" zu verschieben. Das hat
erwartungsgemäss nicht funktioniert.
Dennoch komme ich nicht dahiner, warum nicht.
Kann mir jemand einen Tipp geben ?
danke und
beste gruesse,
martin
funktionert
Hallo Martin,
Ich bin ehrlich gesagt ein wenig verwirrt und vor allem neugierig.
http://sub.domain.net/_content/?site_id=1
Was genau wird denn bei einem solchen Seitenaufruf angezeigt?
Und das das Verschieben der htacess in den Zielordner nicht funktioniert...spontan würde ich sagen...wenn das Ziel aufgerufen wird kommt die htacess ja wieder zum Einsatz! Allerdings wird die auch nur zum Einsatz kommen wenn Du aufrufst http://sub.domain.net/_content/xyz...
Ein Aufruf von http://sub.domain.net/ wird die htacess nicht merken wenn sie denn nicht im Root liegt.
Gruß
Stephan
Hallo Forum,
ich habe zum ersten Mal mit mod_rewrite rumprobiert und bin sogar
zu einem Ergebnis gekommen. Meine .htacccess liegt direkt im
DocumentRoot und sieht (auf eine Rule gekürzt) folgendermassen
aus:.htaccess
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteRule ^$ /_content/?site_id=1&%{QUERY_STRING}
RewriteRule ^Unsere_Leistungen/$ /_content/?site_id=3&%{QUERY_STRING}Damit funktioniert:
Die Eingabe von: "http://sub.domain.net/"
führt zur Ausgabe von "http://sub.domain.net/_content/?site_id=1"
Die Eingabe von: "http://sub.domain.net/Unsere_Leistungen/"
führt zur Ausgabe von "http://sub.domain.net/_content/?site_id=3"alles wie gewünscht. Jetzt hab ich mal ganz naiv versucht, die
.htaccess nach "/_content/.htaccess" zu verschieben. Das hat
erwartungsgemäss nicht funktioniert.Dennoch komme ich nicht dahiner, warum nicht.
Kann mir jemand einen Tipp geben ?
danke und
beste gruesse,
martin
funktionert
Hallo Stephan,
Ich versuche mal mein Anliegen zu beschreiben:
Ausgangslage:
-------------
Ich habe, wie gesagt im DocumentRoot eine .htaccess mit ewig
vielen RewriteRules. Die sind so aufgebaut, dass immer die
"index.php" mit einem Paramter im Unterverzeichns "/_content"
angezeigt wird. Diese ".htaccess" wird über ein selbstgestricktes
CMS erneuert, sobald neue Seiten angelegt und veröffentlicht
werden.
Mein Anliegen:
--------------
Ich möchte eine weitere ".htaccess" mit z.B. Zugriffsrechten im
DocumentRoot anlegen, statt diese Zugriffsrechte in die gleiche
Satei zu schreiben. Deshalb hätte ich gerne, die ".htaccess" mit
den RewriteRules in das Verzeichns "/content" verschoben und
frage mich, ob ich durch ändern der RewriteBase und der -Rules
dieselbe Ausgabe erzeugen kann.
vielleicht mache ich einen grundsätzlichen Denkfehler. Da
bin ich mir eben nicht sicher ;) ich könnte mir auch
vorstellen, dass man die RewriteRules auf zwei .htaccess
verteilen kann.
danke für's Nachdenken und
beste gruesse,
martin
Hallo Martin,
Rewrite Rules in den root und Zugriffsrechte in den _content Ordner?!
Das Problem ist das die htacess ansonsten nicht gefunden wird....es sei denn es gibt das Einstellungen die man evtl. am Apache(IIS, whatever..) machen könnte...da bin ich aber grade überfragt!
Viele Grüße
Stephan
Hallo Stephan,
ja, das war mir eben auch als letzte Möglichkeit eingefallen.
Die Einschränkung besteht allerdings darin, dass die
Zuriffsrechte dann auch wieder nur für das Verzeichnis gelten.
Damit könnte man noch leben aber interssant wird es hier:
Die .htaccess wird, wie beschrieben durch ein CMS ständig neu geschrieben. Dabei ist es in der Vergangenheit zu Fehlern,
genau genommen zu einer fehlerhaften .htaccess und damit zum
Error 500 gekommen. Mein Plan war, ein Error Document für 500
zu definieren, dass dann die htaccess löscht. Und da beisst
sich die Katze in den Schwanz ;)
beste gruesse,
martin
Wie wäre es denn die Nutzerrechte erst gar nicht mit htacess zu machen? Scheint mri genrell eh nicht so die feinste Methode zu sein....es gibt da ein feines Opensource Teil....relativ einfach einzusetzen. Es wird vor dem öffnen einer php eine andere php geladen die die Nutzungsrechte abkaspert. So hättest lediglich die Seiteumleitungsrules in der htacess und die Zugriffsmethodik komplett anders gelöst.
Gruß
Stephan
Das mit den Nutzungsrechten war auch eher ein Beispiel. Ich
schrieb ja schon, dass die .htaccess vor allem aus RewriteRules
besteht, die per Script geschrieben werden. Ausser diesen RewriteRules sollen andere Angaben in der .htaccess stehen
und deshalb hatte ich vor, mit zwei verschedenen .htaccess
zu arbeiten und in /_content/.htaccess die rules für / zu
defineren. das scheint aber en grundsätzlcher denkfehler
meinerseits zu sen und ich muss das anders lösen. das ist auch
möglich, es ging mir mehr darum, herauszufinden, ob ich diesen
denkfehler mache. und so scheint es zu sein.
beste gruesse,
martin
Anders gefragt:
ich habe meine .htaccess nun in das Unterverzechnis Content
verschoben und etwas angepasst, bis ich sie zum Laufen bekommen
habe.
.htaccess
---------------------------------------------------------------------
Options +FollowSymLinks
RewriteEngine On
RewriteBase /_content/
RewriteRule ^$ ?site_id=1&%{QUERY_STRING}
RewriteRule ^Unsere_Leistungen/$ ?site_id=3&%{QUERY_STRING}
---------------------------------------------------------------------
Damt funktioniert nun folgendes erwartungsgemäss:
1.
Die Eingabe von: "http://sub.domain.net/_content/"
führt zur Ausgabe von "http://sub.domain.net/_content/?site_id=1"
2.
Die Eingabe von: "http://sub.domain.net/_content/Unsere_Leistungen/"
führt zur Ausgabe von "http://sub.domain.net/_content/?site_id=3"
... das ist eigentlich nicht das was ich will. Ist es überhaupt möglich, die RewriteRule so zu gestalten, dass die urspünglichen
Eingaben funktionieren ?
beste gruesse,
martin
Nein. Denn bei der ursprünglichen Eingabe wird nur im root nach der .htaccess gesucht. Was aber spricht dagegen die -htacess auch genau dort zu platzieren?
Gruß
Stephan
Anders gefragt:
ich habe meine .htaccess nun in das Unterverzechnis Content
verschoben und etwas angepasst, bis ich sie zum Laufen bekommen
habe..htaccess
Options +FollowSymLinks
RewriteEngine On
RewriteBase /_content/
RewriteRule ^$ ?site_id=1&%{QUERY_STRING}
RewriteRule ^Unsere_Leistungen/$ ?site_id=3&%{QUERY_STRING}Damt funktioniert nun folgendes erwartungsgemäss:
Die Eingabe von: "http://sub.domain.net/_content/"
führt zur Ausgabe von "http://sub.domain.net/_content/?site_id=1"
Die Eingabe von: "http://sub.domain.net/_content/Unsere_Leistungen/"
führt zur Ausgabe von "http://sub.domain.net/_content/?site_id=3"... das ist eigentlich nicht das was ich will. Ist es überhaupt möglich, die RewriteRule so zu gestalten, dass die urspünglichen
Eingaben funktionieren ?beste gruesse,
martin
Hallo Stephan!
Erstmal Danke für Deine Antworten an Martin!
Bitte vermeide dabei TOFU und zitiere vom Vorposter nur die Textpassagen, auf welchen Du Dich beziehst!
Viele Grüße aus Frankfurt/Main,
Patrick
Hallo Stephan!
Hallo Patrick!
Erstmal Danke für Deine Antworten an Martin!
Gern geschehen.
Bitte vermeide dabei TOFU und zitiere vom Vorposter nur die Textpassagen, auf welchen Du Dich beziehst!
Ok...wird gemacht!
Viele Grüße aus Frankfurt/Main,
Viele Grüße aus Langenfeld!
Stephan ;-)