ich werd blöde mit .htaccess!!
ivo
- programmiertechnik
0 jobo0 Edgar Ehritt0 ivo0 Der Martin
0 ivo
1 Edgar Ehritt
Hallo
Ich habe folgendes Problem. Habe schon viel rumprobiert, kriege es aber einfach nicht hin.
Ich habe auf dem Webserver folgende physische Verzeichnisse:
/
/dirA
/dirB
/dirC
In "dirA" liegt ein Website, geschrieben in PHP.
Im Root "/" liegt eine .htaccess welche mittels
RewriteBase /dirA
RewriteRule ^(.*).htm$ index.php?bereich=$1 [L]
RewriteRule ^(.*).html$ index.php?bereich=$1 [L]
Alle Seitenanfragen (also htm, und htmls) werden auf die "index.php" im Verzeichniss "dirA" umgeleitet.
Bis hier funktioniert ach alles wie es soll.
Wenn man aber eine Url MIT einer Verzeichnissangabe aufruft, wird diese ja AUCH in der variable $1 mit übergeben. und genau DAS will ich NICHT, weil dies zu Problemen mit verzeichnissangaben innerhalb der PHP bzw. HTML führt.
Alle Seitenaufrufe MIT Unterverzeichniss sollen so "verändert" werden, als hätte man KEIN unterverzeichniss in der URI angegeben. Der Rest hinter dem letzten Slash soll bleiben.
Kann ich also irgendwie erreichen, dass wenn ein User www.domain.de/X-X-X/blabla.htm aufruft ERSTMAL "umgeschrieben" oder "umgeleitet" wird auf www.DOMAIN.de/blabla.htm und ERST DANN die rewrite-rule mit der index.php greift?
Und wenn das alles möglich sein, sollte möchte ich gern bestimmte verzechnisse von diesen beiden regeln ausschließen.. sagen wir "dirB"..
Hab zwar einige Beispiele dazu gefunden, jedoch hat keins gefruchtet.
Ich hoffe ich hab mein Problem verständlich erklärt und jemand kann helfen..
Danke im vorrais
IVO
Hallo,
gehen tut das.
RewriteRule ^/dirC/(.*).htm$ index.php?bereich=$1&dirwar=C [L]
sollte zb. klappen (testen mit var_dump($_GET). Wenns klappt, bräuchtest du in Schritt 2 einen regulären Ausdruck, der passt.
Gruß
jobo
Hallo,
variante zudem ist:
1. in html dateien die sources mit slash zu beginnen <img src="/pics/etc.jpg">
wie auch css files, damit du nicht relativ zu pfad bist.
2. die innerhalb von PHP an dirname(__FILE__) orientieren, also dem Verzeichnis, in dem die index.php steckt.
den zugriff für statische Dateien (css, jpg etc. kannst du ja erlauben). Zend Framework macht das so: http://framework.zend.com/manual/de/zend.controller.html#zend.controller.quickstart.go.rewrite. und den rest dann aus $_SERVER["REQUEST_URI"] selbst rauslesen.
Gruß
jobo
hallo jobo,
danke für deine antwort.
deinen lösungsansatz werd ich auch mal probieren, dauert nur etwas, da ich ja da in den php scripten rumwurschteln muss.
ich meld mich dazu nochmal
gruß
ivo
Hallo,
variante zudem ist:
in html dateien die sources mit slash zu beginnen <img src="/pics/etc.jpg">
wie auch css files, damit du nicht relativ zu pfad bist.die innerhalb von PHP an dirname(__FILE__) orientieren, also dem Verzeichnis, in dem die index.php steckt.
den zugriff für statische Dateien (css, jpg etc. kannst du ja erlauben). Zend Framework macht das so: http://framework.zend.com/manual/de/zend.controller.html#zend.controller.quickstart.go.rewrite. und den rest dann aus $_SERVER["REQUEST_URI"] selbst rauslesen.
Gruß
jobo
Hallo Ivo,
RewriteRule ^(.*).htm$ index.php?bereich=$1 [L]
RewriteRule ^(.*).html$ index.php?bereich=$1 [L]
beides lässt sich zu folgendem verschmelzen:
RewriteRule ^(.*).html?$ index.php?bereich=$1 [L]
Wenn man aber eine Url MIT einer Verzeichnissangabe aufruft, wird diese ja AUCH in der variable $1 mit übergeben. und genau DAS will ich NICHT, weil dies zu Problemen mit verzeichnissangaben innerhalb der PHP bzw. HTML führt.
RewriteRule ^.*([^/]+).html?$ index.php?bereich=$1 [L]
Und wenn das alles möglich sein, sollte möchte ich gern bestimmte verzechnisse von diesen beiden regeln ausschließen.. sagen wir "dirB"..
RewriteCond %{REQUEST_URI} !^dirB
#
# sind mehr Verzeichnisse auszuschließen, dann
# RewriteCond %{REQUEST_URI} !^(dirB|dirC|dirX)
#
RewriteRule ^.*([^/]+).html?$ index.php?bereich=$1 [L]
Allgemein ist das Rewrite-Modul auf gute Kenntnisse Perl-compatibler Regulärer Ausdrücke angewiesen. Auch ist allen fertigen Beispielen, die im WWW kursieren, die URL Rewriting Guide und die Einführung Apaches vorzuziehen.
Gruß aus Berlin!
eddi
hallo eddi,
danke für die antwort, allerdings führt deine anleitung nicht zum erfolg.
technisch funktioniert es zwar, aber mein problem ist nicht gelöst..
habe deine rewriterules mal exakt übernommen. folgendes passiert:
www.domain.de -> alles bestens, index.php wird aufgerufen, website sieht gut aus
www.domain.de/xyz/ -> auch hier wird die index.php aushgeführt, allerdings mit dem problem, dass durch relative verlunkung innherhalb der php datei alles falsch aussieht (keine bilder, kein stylesheet)
geht das denn nicht so einzurichten, dass wenn der user "www.domain.de/xyz/" eintippt, die htaccess richtig pyhsisch umleitet?
ich will das, wenn der user "www.domain.de/xyz" oben in seine adresszeile eingebenen hat, nach der umleitung da oben "www.domain.de" steht..
genauso wenn er "www.domain.de/xyz/test.html" eingibt, soll auf "www.domain.de/test.html" umgeleitet werden?
denn wenn das geht, hat sich doch auch automatisch das relativ-url problem innerhalb der quelltexte erledigt. oder bin ich da auf der falschen fährte?
gruß
ivo
Hallo Ivo,
RewriteRule ^(.*).htm$ index.php?bereich=$1 [L]
RewriteRule ^(.*).html$ index.php?bereich=$1 [L]beides lässt sich zu folgendem verschmelzen:
RewriteRule ^(.*).html?$ index.php?bereich=$1 [L]
Wenn man aber eine Url MIT einer Verzeichnissangabe aufruft, wird diese ja AUCH in der variable $1 mit übergeben. und genau DAS will ich NICHT, weil dies zu Problemen mit verzeichnissangaben innerhalb der PHP bzw. HTML führt.
RewriteRule ^.*([^/]+).html?$ index.php?bereich=$1 [L]
Und wenn das alles möglich sein, sollte möchte ich gern bestimmte verzechnisse von diesen beiden regeln ausschließen.. sagen wir "dirB"..
RewriteCond %{REQUEST_URI} !^dirB
sind mehr Verzeichnisse auszuschließen, dann
RewriteCond %{REQUEST_URI} !^(dirB|dirC|dirX)
RewriteRule ^.*([^/]+).html?$ index.php?bereich=$1 [L]
>
> Allgemein ist das Rewrite-Modul auf gute Kenntnisse [Perl-compatibler Regulärer Ausdrücke](http://perldoc.perl.org/perlre.html) angewiesen. Auch ist allen fertigen Beispielen, die im WWW kursieren, die [URL Rewriting Guide](http://httpd.apache.org/docs/2.2/rewrite/rewrite_guide.html) und die [Einführung](http://httpd.apache.org/docs/2.2/rewrite/rewrite_intro.html) Apaches vorzuziehen.
>
>
> Gruß aus Berlin!
> eddi
Hallo,
ich will das, wenn der user "www.domain.de/xyz" oben in seine adresszeile eingebenen hat, nach der umleitung da oben "www.domain.de" steht..
dann willst du keine RewriteRule, sondern ein Redirect oder RedirectMatch.
Hallo Ivo,
[...]
Gruß aus Berlin!
eddi
Außerdem lass bitte solche Vollzitate sein - wenn du dich nicht direkt auf den Text aus dem Vorposting beziehst, lass ihn weg; wenn du auf einzelne Passagen Bezug nimmst, lass den Rest weg.
Und verwende für Beispieldomains bitte die extra dafür vorgesehenen Domainnamen wie example.org, example.net usw., anstatt willkürlich gewählter, tatsächlich existierender Domains.
So long,
Martin
Hallo Martin,
entschuldige, du hast Recht. Werde in Zukunft darauf achten.
Dein Tipp mit dem RedirectMatch scheint perfekt zu sein. Nur bekomme ich es mangels Kenntnis perl-regulärer-Ausdrücke nicht hin. Kannst du da noch helfen?
Ich verstehe das Beispiel aus deinem Link
RedirectMatch (.*).gif$ http://www.anotherserver.com$1.jpg
zwar sinngemäß, kann es aber nicht auf mein Anwendungsfall übertragen.
Ich möchte ja das bei der Eingabe "www.example.org" das Redirect NICHT greift sondern nur die RewriteRuel.
Gib aber jemand "www.example.org/abc/def.html" ein, soll ERST der Redirect greifen und auf "www.example.org/def.html" umleiten.
Denn dann würde ja wieder der erste Fall eintreten und die RewriteRule würde anstatt des Redirectes greifen.
Sprich : der Redirect darf NUR dann greifen, wenn mindestens ein Unterverzeichniss in der Url steckt.
Naja, und zu allem Überfluß sollen dann explizit angebene Verzeichnisse von BEIDEN Regeln ausgenommen werden.
Sprich das Redirect soll wie oben alle Urls mit Unterverzeichnissen umleiten, AUßER die explizit angegebene. Genauso soll die RewriteRule auf diese explizit angegebenen Verzeichnisse NICHT wirken.
Gruß
Ivo
Re:
geht das denn nicht so einzurichten, dass wenn der user "www.domain.de/xyz/" eintippt, die htaccess richtig pyhsisch umleitet?
ich will das, wenn der user "www.domain.de/xyz" oben in seine adresszeile eingebenen hat, nach der umleitung da oben "www.domain.de" steht..
genauso wenn er "www.domain.de/xyz/test.html" eingibt, soll auf "www.domain.de/test.html" umgeleitet werden?
Aus technischer Sicht ist das nicht wünschenswert, denn aus einer Anfrage an "www.domain.de/xyz/" werden zwei, was überflüssig ist. Eine Umleitung, nur weil eingebundene Medien und Stylesheets nicht geladen werden, ist zu vermeiden.
denn wenn das geht, hat sich doch auch automatisch das relativ-url problem innerhalb der quelltexte erledigt. oder bin ich da auf der falschen fährte?
Das Problem hätte sich zwar erledigt, aber um welchen Preis? Genau genommen würdest Du dann jedem, der bei Dir an die Haustür klopft, aufmachen, zurufen "geh durch den Hintereingang" und ihm die Tür wieder vor der Nase zu knallen. Jobo hatte Dir erklärt, dass mit absoluten Pfaden Dein Problem zu lösen ist, auch wenn es eben Arbeit bedeutet.
Gruß aus Berlin!
eddi