ModRewrite - Redirect
Alex
- webserver
Hallo,
ich bin gerade wegen ModRewrite total am verzweifeln. Vielleicht kann mir von euch ja da einer helfen :)
Also ich habe ein paar Domains, die alle auf die gleiche Website zeigen. Habe zu dem namen jeweils die .com und die .net sowie eine Variante mit einem häufigen Sprachfehler.
Die werden per ModRewrite alle auf die Hauptdomain geleitet. Dabei wird auch gleich ein www. am Anfang angehängt wenn man keines eingegeben hat.
Das sieht so aus:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.net$
RewriteRule ^(.*)$ http://www.example.net/$1 [L,R=301]
Das klappt alles wunderbar - bis auf meine Statistik (die beim Hosting dabei is). Wir sind die Woche auf einen neuen Server umgezogen. Administriert wird der mit ServControl und AwStats läuft als Statistik. Die Statistik ruft man über /usage bzw. aus Servcontrol aus.
Jetzt habe ich das Problem, dass ich wenn ich zur Statistik will und kein www. eingebe (so wie es auch bei dem Link aus Servcontrol passiert) ja durch die oben zitierte ModRewrite Schleife durch muss. Dabie stöhrt sich AwStats bzw. die .htaccess oder was auch immer in dem Ordner and dem [R=301].
Ich werde dann auf eine 401 Fehlerseite weitergeschickt und bekomme das aber mit 404 quittiert, weil er die 401 Fehlerseite nicht findet (was auch merkwürdig ist).
Wenn ich [R=301] weglasse klappt es ohne Probleme.
Jetzt zu meiner Frage:
Was kann ich tun?
Ich habe an der .htacces im Hauptverzeichnis und auch an denen von AwStat herumgespielt - es bringt alles nichts. (Bis auf das Löschen von [R=301] aber das soll ja auch nicht sein...)
Ich würde deshalb gerne irgendwie den Ordner usage aus der ganzen Rewrite Geschichte ausklammern. Ich habe das auch schon so probiert:
RewriteCond %{REQUEST_URI} !^.*usage.*$
RewriteCond %{HTTP_HOST} ^example.net$
RewriteRule ^(.*)$ http://www.example.net/$1 [L,R=301]
Leider klappt das nicht. Vielleicht habe ich da auch was falsch verstanden aber ich dachte damit würd eich den Ordner ausschließen.
Habe auch mit
RewriteCond %{REQUEST_URI} ^.*usage.*$
RewriteCond %{HTTP_HOST} ^example.net$
RewriteRule ^(.*)$ http://www.example.net/$1 [L]
versucht vorzubeugen, dass die anderen Rules - mit R=301 - überhaupt durchgeführt werden - weil ich dachte das [L] dafür sorgt, dass kein RewriteCond/RewriteRule-Paar mehr ausgeführt wird...falsch gedacht.
Also ich würde mich echt freuen, wenn mir da einer einen Tipp geben kann - die Tutorials sind da leider nciht hilfreich :(
Gruß
Alex
Hi,
Also ich habe ein paar Domains, die alle auf die gleiche Website zeigen. Habe zu dem namen jeweils die .com und die .net sowie eine Variante mit einem häufigen Sprachfehler.
klingt soweit sinnvoll.
Die werden per ModRewrite alle auf die Hauptdomain geleitet.
Das klingt weniger sinnvoll. Warum sind nicht einfach serverintern alle Domains auf dasselbe Verzeichnis abgebildet?
Dabei wird auch gleich ein www. am Anfang angehängt wenn man keines eingegeben hat.
Ich würd's eher umgekehrt machen (auf den Hostnamen ohne www umleiten), aber jeder wie er Lust hat ...
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.net$
RewriteRule ^(.*)$ http://www.example.net/$1 [L,R=301]
Sieht korrekt aus.
Jetzt habe ich das Problem, dass ich wenn ich zur Statistik will und kein www. eingebe
Moment: Du rufst deine eigene Statistik auch per HTTP ab?
Abgesehen davon würde ich annehmen, dass du selbst quasi intuitiv ein www-Präfix eingibst, wenn du sogar andere auf den Hostnamen mit diesem Präfix umleitest. Also wo ist das Problem?
(so wie es auch bei dem Link aus Servcontrol passiert) ja durch die oben zitierte ModRewrite Schleife durch muss. Dabie stöhrt sich AwStats bzw. die .htaccess oder was auch immer in dem Ordner and dem [R=301].
Ich werde dann auf eine 401 Fehlerseite weitergeschickt und bekomme das aber mit 404 quittiert, weil er die 401 Fehlerseite nicht findet (was auch merkwürdig ist).
Wie lautet die URL für die Statistik-Seite? Hat sie einen eigenen Hostnamen?
Was kann ich tun?
Das hängst von der Antwort auf die vorherige Frage ab.
Ich würde deshalb gerne irgendwie den Ordner usage aus der ganzen Rewrite Geschichte ausklammern.
[...]
Also ich würde mich echt freuen, wenn mir da einer einen Tipp geben kann - die Tutorials sind da leider nciht hilfreich :(
Deine Informationen leider auch nicht.
Ciao,
Martin
Hallo,
danke für deine Antwort.
Die werden per ModRewrite alle auf die Hauptdomain geleitet.
Das klingt weniger sinnvoll. Warum sind nicht einfach serverintern alle Domains auf dasselbe Verzeichnis abgebildet?
»»
Man kommt schon automatisch auf der Seite an, wenn man eine andere Domain nimmt - aber dann bleibt halt die falsche Domain in der Adresszeile stehen.
Jetzt habe ich das Problem, dass ich wenn ich zur Statistik will und kein www. eingebe
Moment: Du rufst deine eigene Statistik auch per HTTP ab?
Abgesehen davon würde ich annehmen, dass du selbst quasi intuitiv ein www-Präfix eingibst, wenn du sogar andere auf den Hostnamen mit diesem Präfix umleitest. Also wo ist das Problem?Wie lautet die URL für die Statistik-Seite? Hat sie einen eigenen Hostnamen?
Ja die Statistik wird über HTTP abgerufen. Ich kann sie über http://example.net/usage aufrufen.
Intern wird das dann auf http://example.net/usage/awstats/awstats.pl weitergeleitet.
Mir geht es gar nicht so sehr drum, dass ich selbst www. eingeben muss sondern eher darum, dass der Statistik-Link in Servcontrol eben auf die Version ohne www. verwist und ich daher, wenn ich (oder jemand anders) über ServControl auf die Statistik zugreifen will einen 401 Fehler bekomme, anstatt die Statistik oder wenigstens das HTTP-Login-Fenster.
Also ich würde mich echt freuen, wenn mir da einer einen Tipp geben kann - die Tutorials sind da leider nciht hilfreich :(
Deine Informationen leider auch nicht.
Ich hoffe, jetzt ist es ein bisschen klarer.
Gruß
Alex
n'Abend,
Warum sind nicht einfach serverintern alle Domains auf dasselbe Verzeichnis abgebildet?
Man kommt schon automatisch auf der Seite an, wenn man eine andere Domain nimmt - aber dann bleibt halt die falsche Domain in der Adresszeile stehen.
was heißt "falsch"? Es ist die Domain, unter der ich die Webpräsenz erreichen wollte, und die du als Betreiber offensichtlich auch unterstützt. Von "falsch" kann also keine Rede sein.
Dennoch würde ich hier kein URL Rewriting erwarten, sondern eine Serverkonfiguration, die einfach alle virtuellen Hosts direkt auf dasselbe Verzeichnis abbildet.
Moment: Du rufst deine eigene Statistik auch per HTTP ab?
Wie lautet die URL für die Statistik-Seite? Hat sie einen eigenen Hostnamen?
Ja die Statistik wird über HTTP abgerufen. Ich kann sie über http://example.net/usage aufrufen.
Seltsamer Provider - die URL für die Statistik liegt also ganz normal im Namensraum der öffentlich erreichbaren URLs. Ich hätte sie in einem separaten Namensraum, z.B. der vom Provider zur Verfügung gestellten Konfigurationsoberfläche erwartet. Schließlich geht sie außer dem Betreiber niemanden etwas an.
Intern wird das dann auf http://example.net/usage/awstats/awstats.pl weitergeleitet.
Ah, jetzt wird's spannend: Da gibt es also offensichtlich noch ein URL-Rewritig, das mit deinem in Konkurrenz steht.
Ich hoffe, jetzt ist es ein bisschen klarer.
Zumindest wird es jetzt klarer, wo der Konflikt besteht.
Ciao,
Martin
Hallo,
was heißt "falsch"? Es ist die Domain, unter der ich die Webpräsenz erreichen wollte, und die du als Betreiber offensichtlich auch unterstützt. Von "falsch" kann also keine Rede sein.
Ich denke schon, dass man da von "falsch" reden kann, wenn ein Rechtschreibfehler drinnen ist, oder die falsche Endung genutzt wird, obwohl das Projekt unter dem Domainnamen example.net bekannt ist. Aber das ist ja hier unwichtig...
Dennoch würde ich hier kein URL Rewriting erwarten, sondern eine Serverkonfiguration, die einfach alle virtuellen Hosts direkt auf dasselbe Verzeichnis abbildet.
Das muss ich mal schauen, wie sich das machen lässt - klingt vernünftig.
Seltsamer Provider - die URL für die Statistik liegt also ganz normal im Namensraum der öffentlich erreichbaren URLs. Ich hätte sie in einem separaten Namensraum, z.B. der vom Provider zur Verfügung gestellten Konfigurationsoberfläche erwartet. Schließlich geht sie außer dem Betreiber niemanden etwas an.
Ja, das (und einiges anderes) wundert mich auch.
Intern wird das dann auf http://example.net/usage/awstats/awstats.pl weitergeleitet.
Ah, jetzt wird's spannend: Da gibt es also offensichtlich noch ein URL-Rewritig, das mit deinem in Konkurrenz steht.
Genau (ich hatte dedacht, das wäre beim ersten Posting schon irgendwie rübergekommen ;) ). Ich habe auch schon an diesen .htaccess Dateien versucht etwas zu machen. (Hab so viel probiert und kann deshalb nciht mehr genau sagen was - leider). Das will ich aber eigentlich auch vermeiden, weil ich mir nicht ganz sicher bin, dass die Änderungen auch bestehen bleiben...der Ordner stellt sich irgendwie immer wieder automatisch her.
Ich konnte es wie gesagt soweit eingrenzen, dass ich weiß, dass es an dem R=301 in dem RewriteRule, der für das www. zuständig ist, liegt.
Jetzt müsste ich irgendwie speziell für den Ordner usage sagen, dass er R=301 weglassen soll. Die Methoden die ich probiert habe und oben gepostet habe klappen aber nicht.
Gruß
Alex
Hallo,
jetzt verstehe ich die Welt nicht mehr.
Ich konnte es wie gesagt soweit eingrenzen, dass ich weiß, dass es an dem R=301 in dem RewriteRule, der für das www. zuständig ist, liegt.
Jetzt müsste ich irgendwie speziell für den Ordner usage sagen, dass er R=301 weglassen soll. Die Methoden die ich probiert habe und oben gepostet habe klappen aber nicht.
Gestern war das noch so^^ Habe das heute nochmal ausprobiert (R=301 weglassen) und da bekomme ich einen Internal Server Error.
Irgendwie bin ich wohl zu doof für ModRewrite :(
Gruß
Alex
moin,
Das klappt alles wunderbar - bis auf meine Statistik (die beim Hosting dabei is). Wir sind die Woche auf einen neuen Server umgezogen.
Ein Grund mehr, sich von diesem dämlichen www zu trennen.
Wenn ich [R=301] weglasse klappt es ohne Probleme.
Tja, dann duck Dir doch mal an, was das Flag bewirkt, beobachte die Adresszeile!
Mit R=301 Flag:
Der Server sendet den Status 301 und einen Location-Header, die angeforderte Seite REQUEST_URI wird auf eine andere Location umgeleitet, REQUEST_URI verschwindet in der Adresszeile und es wird die neue Location dort angezeigt.
Ohne R=301 Flag:
Es erfolgt keine Umleitung. Der Server liefert den Inhalt der von Rewrite bestimmten Seite aus mit Status 200 (wenn OK). REQUEST_URI bleibt in der Adresszeile stehen.
Das Verständnis dieser Sachverhalte sollte über den sinnvollen Einsatz der Rewrite Engine den entscheidenden Ausschlag geben.
Hotti
Hallo,
danke für deine Antwort.
Über das www. kann man sich streiten habe ich hier schon gelernt - aber das soll halt jeder so machen wie es ihm gefällt...
In jeder Anleitung, wie man www. hinzufügt bzw. auch autmatisch wegnimmt, wenn es der User eingegeben hat steht drinnen, dass man es mit einem Redirect=301 machen soll. Auch weil Suchmaschinen das nicht so wie gewollt indizieren.
Stimmt das nicht?
Wenn doch, muss ich es ja wohl so lassen und muss es nbur für den Ordner "usage" irgendwie umgehen, oder?
Vielleicht kannst du mich noch ein kleines bisschen mehr zum Ziel führen - danke dir schon mal!
Gruß
Alex
hi,
In jeder Anleitung, wie man www. hinzufügt bzw. auch autmatisch wegnimmt, wenn es der User eingegeben hat steht drinnen, dass man es mit einem Redirect=301 machen soll. Auch weil Suchmaschinen das nicht so wie gewollt indizieren.
Status 301 sagt auch der SuMa, dass hier eine Umleitung vorliegt. Oder mal anders ausgedrückt: Der UserAgent (SuMa) soll den ursprünglichen Request verwerfen und zur Location gehen, die der Server als LocationHeader sendet. Ohne 301 würde die SuMa www.example.com und example.com als doppelten Content werten.
Vielleicht kannst du mich noch ein kleines bisschen mehr zum Ziel führen - danke dir schon mal!
Gerne: das www macht nur Arbeit, die nicht sein muss. Nimm (Du oder der Provider) den Eintrag auf dem Nameserver raus, ist meine Empfehlung.
Viele Grüße,
Horst Struwwelpeter
Hallo,
Gerne: das www macht nur Arbeit, die nicht sein muss. Nimm (Du oder der Provider) den Eintrag auf dem Nameserver raus, ist meine Empfehlung.
Das mag ja sein, dass du das so siehst. Ich hätte es aber gerne mit www. und habe eine andere Frage gestellt.
Klar lässt die FRage sich so vielleicht erledigen (obwohl dann wahrscheinlich beim wegnehmen vom www. genau der gleiche Fehler auftritt) aber dann könnte man genausogut antworten ich soll das Projekt gleich sein lassen, weil dann mein Problem auch weg ist...
Schade, dass du keine zielführenden Antworten hast bzw. gibst.
Vielleicht kann mir ja noch jemand anders helfen ModRewrite zu verstehen.
Gruß
Alex
hi,
Schade, dass du keine zielführenden Antworten hast bzw. gibst.
Gibt dir maln bischen Mühe, das [R=301] zu verstehen. Der Useragent verwirft den REQUEST_URI. Wenn da Parameter (GET, POST) enthalten sind, musst Du Deine Anwendung, die von der Rewriteengine aufgerufen wird, enntsprechend ändern. Hast du das verstanden?
Viele Grüße,
Hotti
Hallo,
Gibt dir maln bischen Mühe, das [R=301] zu verstehen. Der Useragent verwirft den REQUEST_URI. Wenn da Parameter (GET, POST) enthalten sind, musst Du Deine Anwendung, die von der Rewriteengine aufgerufen wird, enntsprechend ändern. Hast du das verstanden?
OK, ich gebe mir Mühe, verstehe das Problem aber immer noch nicht. Welche Parameter werden denn vergeben/welche verliere ich? Denn die Authentifizierungs-Login-Box kommt ja gar nicht erst. Und GET wird ja durch die RewriteRule mit übergeben.
Gruß
Alex
[latex]Mae govannen![/latex]
Gerne: das www macht nur Arbeit, die nicht sein muss. Nimm (Du oder der Provider) den Eintrag auf dem Nameserver raus, ist meine Empfehlung.
Damit man wie bei deiner Site wartet, wartet .. und dann eine Fehlermeldung erhält? Nein, das wurde schon beim ersten Mal als du diesen Vorschlag gemacht hast als unsinnig angesehen.
Cü,
Kai
hi,
Gerne: das www macht nur Arbeit, die nicht sein muss. Nimm (Du oder der Provider) den Eintrag auf dem Nameserver raus, ist meine Empfehlung.
Damit man wie bei deiner Site wartet, wartet .. und dann eine Fehlermeldung erhält?
Die Links auf meiner Site funktionieren alle einwandfrei. Auf meiner Site gibt es nicht einen Link, der sich so verhält wie Du beschreibst.
Sofern Du Requests an nicht existierende Domänen sendest, oder Links auf nicht existente Domänen setzt, ist das nicht mein Problem.
Hotti
Hallo,
Sofern Du Requests an nicht existierende Domänen sendest, oder Links auf nicht existente Domänen setzt, ist das nicht mein Problem.
du willst also wirklich Leute, die aus Gewohnheit ein www-Präfix eingeben, "weil das ja im Web immer so ist", im Regen stehenlassen? Nicht wirklich, oder? Bei aller Dogmatik - wenigstens ein Redirect von www.example.org auf example.org wäre angebracht.
Ciao,
Martin
hi,
[..]Bei aller Dogmatik - wenigstens ein Redirect von www.example.org auf example.org wäre angebracht.
Tut mir leid, meine .htaccess ist voll ;-)
Hotti
Hallo,
Sofern Du Requests an nicht existierende Domänen sendest, oder Links auf nicht existente Domänen setzt, ist das nicht mein Problem.
Warum genau hast du eine Website? Nur aus Spaß am Designen/Programmieren?
Wenn ja, dass kann man diese Antwort verstehen.
Geht es dir aber darum möglichst viele User zu haben und denen etwas zu bieten - oder gar um etwas geschäftliches - kann ich das nicht verstehen.
Viele Leute geben standardmäßig www. ein. Die werden dann alle mal enttäuscht sein, wenn sie nicht über eine Link sondern eben mit www.domain versuchen zuzugreifen...
Gruß
Alex
Hallo Hotti,
Sofern Du Requests an nicht existierende Domänen sendest, oder Links auf nicht existente Domänen setzt, ist das nicht mein Problem.
Hab Dir letztens schon gesagt das ich Dein fehlendes www. "bloede" finde.
Jaaaa, ich weiss ist auch nur eine Subdomain
und nochmal Jaaaa ich halte diese Subdomain fuer sowas wie Standart.
aber zum Glueck darf jeder war er will ;-)
bis dann
Ulli
Hallo,
Hab Dir letztens schon gesagt das ich Dein fehlendes www. "bloede" finde.
ACK.
Wobei ich das reflexartige, grundlose Voranstellen von "www" noch viel blöder finde. Ich bin auch dafür, die Variante ohne www-Präfix zu bevorzugen. Aber aufgrund der tiefsitzenden Gewohnheit bei einer großen Mehrheit der Internet-Nutzer muss man einfach tolerant sein und die Eingabe mit www vornedran auch akzeptieren.
und nochmal Jaaaa ich halte diese Subdomain fuer sowas wie Standart.
Eine Stand-Art? Eine Standarte? Nicht doch eher "standing art"?
Woher zum Teufel kommt nur die so häufige falsche Schreibweise von "Standard"? *seufz*
aber zum Glueck darf jeder war er will ;-)
Ja, mit gewissen Einschränkungen.
Ciao,
Martin
Hallo alle zusammen,
jetzt habe ich endlich nach 3 vergeudeten Abenden die Lösung gefunden. Habe irgendwie was neues in Google eingegeben und schon war es da.
Es sieht jetzt so aus:
RewriteCond %{HTTP_HOST} !^www.example.net$
RewriteCond $1 !^(401.html)
RewriteCond %{SCRIPT_FILENAME} !.*/usage.*
RewriteRule ^(.*)$ http://www.example.net/$1 [L,R=301]
Die Zeile mit dem 401.html ist die entscheidende. Wenn der aufgerufene Ordner (hier: usage) eine Authentication enthält greift nämlich der Ausschluss des Ordners (in der nächsten Zeile) nicht und man wird auf eine 401 (die nicht existiert) weitergeleitet.
So, das zur Theorie, so wie ich das hier:
http://codeigniter.com/forums/viewthread/56677/#364483
und hier
http://expressionengine.com/wiki/Remove_index.php_From_URLs/
verstanden habe.
Wieso oder wie genau das funktioniert - keine Ahnung. Ich würde es gerne wissen, aber hoffe, dass ich mich jetzt mal wieder auf was wirklich wichtiges konzentireren kann ;)
Achja, eine eigene 401-Seite (mit ErrorDocument) darf man nicht definieren - ansonsten sieht man die anstatt der Login-Box und der Zielseite.
Gruß
Alex