.htaccess Befehle formatieren...
SebastianJu
- webserver
0 ChrisB
Hallo,
ich habe ein paar Schwierigkeiten meine .htaccess zu konfigurieren.
Ich habe auf mein Hosting mehrere Domains geleitet da ich nicht für alle ein eigenes Web anlegen will. Deshalb sind sie in einem Web zusammengefaßt. Theoretisch führt das dazu dass alle Domains die dort eingetragen sind das gleiche anzeigen. Damit das nicht passiert habe ich für jede Domain ein eigenes Unterverzeichnis im Verzeichnis /web/ angelegt. Die Verzeichnisse heißen genau so wie die Domains. Also zB /web/domain1.com/ usw.
Bei einem früheren Projekt hatte das auch ganz gut geklappt ohne dass mir Probleme aufgefallen wären aber jetzt klappt das nicht mehr so richtig.
Bisher sieht der Code so aus (Domain wird später noch mit Variablen ersetzt wenn es funktioniert):
RewriteCond %{HTTP_HOST} ^domain1\.info [NC]
RewriteRule ^(.*)$ /domain1\.info/$1 [L]
Damit bekomme ich aber ein 500 Internal Error. Wenn ich das (.*) entferne dann geht es aber auch nicht vollständig. ZB fehlen dann natürlich Pfadverweise wie index.php oder ähnliches. Was zu 404 führt wenn ich direkt auf index.php auflöse. Auch wenn ich nur die Hauptdomain aufrufe passt es, aber nicht ganz. Die Hauptdomain mit ihrem Content wird zwar aufgerufen aber relative Verweise funktionieren nicht. ZB main.css im Quelltext wird nicht mehr gefunden. Gibt es für relative Verweise überhaupt eine Lösung?
Ich weiß nicht wo das Problem mit dem Servererror liegt aber es ist im RewriteRule.
Ich habe schon gedacht ob es vielleicht daran liegen könnte dass RewriteCond immer stimmt und dadurch eine Unendlichschleife ausgelöst wird und habe hinter die erste cond noch
RewriteCond %{REQUEST_URI} !(^/domain1.info) [NC,C]
geschrieben aber ohne Effekt.
Weiß jemand die Lösung?
Hi,
RewriteCond %{HTTP_HOST} ^domain1.info [NC]
RewriteRule ^(.*)$ /domain1.info/$1 [L]
>
> Damit bekomme ich aber ein 500 Internal Error.
Den dürftest du vermutlich wegen dem \ vor dem .info in der Rule bekommen.
Mach dir klar, an welcher Stelle reguläre Ausdrücke als Suchmuster stehen - an den Stellen muss der Punkt maskiert werden, wenn er keine Sonderbedeutung haben soll.
In den Ersatz-Strings hingegen hat er keine Sonderbedeutung - deshalb wird er auch dort nicht maskiert.
domain1\.info ist schlicht kein gültiger Domainname.
MfG ChrisB
--
“Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
Ich glaube ich habe es jetzt im Prinzip. Der Strich vor dem Punkt in der Rule war nicht das Problem obwohl ich sehe dass der da nichts zu suchen hat. Aber offenbar wird der auch in der Rule nicht beachtet.
Die jetzige Lösung sieht so aus (Schon etwas dynamisiert):
RewriteCond %{HTTP_HOST} ([a-z0-9-]+.[a-z]{2,})$ [NC]
RewriteCond %{REQUEST_URI} !domain1.info [NC]
RewriteRule ^(.*)$ %1/$1
Ich wußte nicht dass die Conds automatisch mit Und verknüpft sind und dachte das macht man mit C. Und in der Rule war wohl der Strich vor dem Directory falsch oder so.
Jedenfalls wird die Seite so jetzt wirklich richtig angezeigt. Sogar samt relativ verlinktem css. Mir ist zumindest bisher kein Problem aufgefallen.
Das einzige was mich jetzt noch stört ist dass in der zweiten Cond keine Variable funktioniert. Ich hatte gehofft ich kann dort mit %1 auf den Domainnamen aus der vorherigen cond zugreifen aber das führt nur zum Servererror.
Jetzt wird also jede Domain die ankommt auf ihr eigenes Verzeichnis gelenkt.
Kann ich in der zweiten Cond den Domainnamen auch noch dynamisieren?