Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Subdomain per htaccess mod rewrite löschen

Frage Internet Server

Mitglied: Codehunter

Codehunter (Level 2) - Jetzt verbinden

14.07.2010, aktualisiert 10:02 Uhr, 6382 Aufrufe, 6 Kommentare

Hallo zusammen!

Ich habe folgendes Szenario:

1. Ein Webspace mit PHP-Scripten
2. Mehrere Domains welche auf ein und den selben Webspace verweisen
3. Eine Website die
- mehrsprachig ist
- eine dynamische Sprachumschaltung bietet
- ausgiebigen Gebrauch von Browser-Caches machen soll
- ausgiebigen Gebrauch von Rewrite-Rules zur SuMa-Optimierung macht

Mein Problem: Browser-Cache und dynamische Sprachumschaltung machen zusammen Probleme da einige (nicht alle) Browser die HTML-Inhalte der überschriebenen URLs nicht neu laden sondern aus dem Cache holen und zwar immer mit der Sprache die zuerst gewählt war.

Meine Idee: Die Sprachumschaltung so lösen dass die einzelnen Sprachen als Subdomains angelegt sind, z.B.:

http://de.domain.tld/test.html
http://en.domain.tld/test.html
http://fr.domain.tld/test.html

http://de.domain2.tld/test.html
http://en.domain2.tld/test.html
http://fr.domain2.tld/test.html

usw.

So würde der Browser für jede Subdomain einen separaten Cache anlegen. Jetzt müßte ich nur noch mod_rewrite dazu kriegen die jeweilige Sprach-Subdomain undabhängig von der Domain (da es ja mehrere verschiedene gibt) einfach aus der URL zu löschen sodass am Ende nur noch

http://domain.tld/test.html
http://domain2.tld/test.html
usw.

übrig bleiben. Die Erkennung welche Sprache in der URL stand mache ich dann im Nachgang im PHP über $_SERVER['SERVER_NAME'].
Mitglied: Snowman25
14.07.2010 um 10:52 Uhr
Hallo Codehunter,

kennst du die beiden META-Tags PRAGMA und CACHE-CONTROL?

Möglicherweise können sie dir bei deinem Problem helfen

Gruß
Snow
Bitte warten ..
Mitglied: Codehunter
14.07.2010 um 10:59 Uhr
Kenn ich. Nützt aber für sich alleine nichts da wie gesagt je ein Cache pro Sprache angelegt werden muss (liegt in der Natur der Scripte die da laufen)
Bitte warten ..
Mitglied: Arano
14.07.2010 um 11:18 Uhr
Moin moin

... noch mod_rewrite dazu kriegen die jeweilige Sprach-Subdomain ... aus der URL zu löschen ...
Die Erkennung welche Sprache in der URL stand mache ich dann im Nachgang im PHP über $_SERVER['SERVER_NAME'].

Bist du dir da sicher ?
Mein Gedanke war das nach dem "umschreiben" der URI diese... eben umgeschrieben ist - die alte nicht mehr da ist !

Ich habe da mal schnell ein bisschen am meiner Config gebastelt:
01.
<VirtualHost *:80> 
02.
    ServerName   test 
03.
    DocumentRoot "/srv/htdocs/test/www" 
04.
</VirtualHost> 
05.
 
06.
<VirtualHost *:80> 
07.
    ServerName   de.test 
08.
    DocumentRoot "/srv/htdocs/test/www" 
09.
</VirtualHost>
.htaccess
01.
RewriteCond %{SERVER_NAME} ^de 
02.
RewriteRule (.*) http://test/codehunter2/$1
Der Aufruf von "de.test/codehunter2" wurde auf "test/codehunter2" umgeleitet wo mir "$_SERVER['SERVER_NAME']" den Servernamen: "test" ausgibt !

Und wenn man sich die HTTP-Header ansieht wird auch klar warum:
01.
http://de.test/codehunter2/ 
02.
 
03.
GET /codehunter2/ HTTP/1.1 
04.
Host: de.test 
05.
User-Agent: Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 
06.
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
07.
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3 
08.
Accept-Encoding: gzip,deflate 
09.
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 
10.
Keep-Alive: 300 
11.
Connection: keep-alive 
12.
 
13.
HTTP/1.1 302 Found 
14.
Date: Wed, 14 Jul 2010 08:57:54 GMT 
15.
Server: Apache/2.2.14 (Unix) 
16.
Location: http://test/codehunter2/ 
17.
Content-Length: 208 
18.
Keep-Alive: timeout=5, max=100 
19.
Connection: Keep-Alive 
20.
Content-Type: text/html; charset=iso-8859-1 
21.
---------------------------------------------------------- 
22.
http://test/codehunter2/ 
23.
 
24.
GET /codehunter2/ HTTP/1.1 
25.
Host: test 
26.
User-Agent: Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 
27.
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
28.
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3 
29.
Accept-Encoding: gzip,deflate 
30.
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 
31.
Keep-Alive: 300 
32.
Connection: keep-alive 
33.
 
34.
HTTP/1.1 200 OK 
35.
Date: Wed, 14 Jul 2010 08:57:54 GMT 
36.
Server: Apache/2.2.14 (Unix) 
37.
X-Powered-By: PHP/5.3.1 
38.
Keep-Alive: timeout=5, max=100 
39.
Connection: Keep-Alive 
40.
Transfer-Encoding: chunked 
41.
Content-Type: text/html 
42.
----------------------------------------------------------

Und dann wäre da auch noch folgendes:
Ich vermute mal das du die Links in deinem Seiten alle relativ gestaltet hast. Wenn ich nun die englische Version deiner Seite aufrufe "bastelt" mir mein Browser die URL der Links ja aus aufgerufenen URI und dem relativen Pfad aus dem Link zusammen: "http:en.test/" ; "shop/artikel-15.html"//. Wenn du das aber nun umschreiben lassen würdest, würde ich anstelle der englischen Subdomain die deutsche Domain im Browser stehen haben ! Und wenn wir nun die Links nochmal zusammen setzten und einen anklicken, landen wir zwar auf der richtigen Seite, aber in der falschen Sprache !


~Arano
Bitte warten ..
Mitglied: Codehunter
14.07.2010 um 11:52 Uhr
@Arano:

Das wäre natürlich eine dumme Sache. Da ich das bisher nicht testen konnte weil das Umschreiben der Subdomain bisher nicht funktioniert hat bin ich von der Tatsache ausgegangen, dass umgeschriebene URLs in $_SERVER['REQUEST_URI'] in ihrer Originalform auftauchen, nicht in der umgeschriebenen Form. Dort fehlt aber der Hostname-Anteil und das http:// und ich bin davon ausgegangen daß das Verhalten bei $_SERVER['SERVER_NAME'] äquivalent zu $_SERVER['REQUEST_URI'] wäre.

Was mich jetzt aber wundert: In deinem Fall scheint der Server einen Location-Redirect zu schicken. Bei mir macht das der Apache nicht wenn ich mit mod-rewrite was umschreibe. Dort bleibt der Link in der Browser-Adresszeile so stehen wie eingegeben bzw. angeklickt.

Ansonsten hast du mein Vorhaben vollkommen richtig durchschaut.

Das Kernproblem in meinem Fall ist, dass einige Browser (IE und FF) überhaupt keinen Request mehr an den Server absetzen wenn der Cache-Header vorher eine längere Lebensdauer angegeben hat. Opera verhält sich da schlauer und ruft jedesmal die Resource neu ab, bricht aber nach dem Einlesen des HTTP-Resonse-Header die Verbindung ab wenn der Cache noch gültig ist. IE und FF ignorieren auch die must-revalidate-Anweisung im Cache-Control wenn sie so definiert ist: Cache-Control: max-age=3600, private, must-revalidate

Die Links sind wie du schon sagst alle relativ (bis auf den Sprachumschaltungslink, den WOLLTE ich statisch auf die Subdomain plus dynamisch hinten dran gebastelt den aktuellen REQUEST_URI machen.

Was jetzt aber wahrscheinlich meinen Ansatz komplett begräbt ist die Tatsache dass unser Webhoster keine Wildcard-Subdomains zulässt Jetzt bleibt mir wohl nur noch, die ganzen Subdomains (Anzahl der Domains multipliziert mit der Anzahl der Sprachen) tatsächlich als VHosts anzulegen *mäh*

EDIT/Korrektur: Opera bricht den Download der Resource nicht ab sondern schickt im Request-Header ein if-modified.since mit was IE und FF nicht tun. Der Server seinerseits ist recht intelligent darin, zu bestimmen ob sich was am Output der Scripte geändert hat oder nicht. Nur was nützt das wenn die Browser diese Infos nicht nutzen? Daran krankt es in meinem Fall. Wenn ich mir überlege was die Konsequenzen sind... IE und FF laden jedesmal die ganze Seite inkl. aller CSS-, JS-, PNG und sonstwas-Dateien nach. Das ist ne Menge unnützer Traffic und ich geh mal schwer davon aus daß dieses Problem nicht nur mich ganz allein auf der Welt betrifft.

Dieser Bug ist zumindest beim IE uralt: http://support.microsoft.com/kb/q217196/ und bis heute (getestet mit voll gepatchtem IE8) nicht gefixt.

EDIT: Fazit: Mein ursprünglicher Ansatz, das ganze über Subdomains zu lösen funktioniert tatsächlich. Der Internet Explorer bildet für jede Subdomain einen separaten Cache. Dadurch kann man alles schön cachen lassen und die dynamische Sprachumschaltung funktioniert auch sauber. Die Ladezeiten pro Pagehit haben sich schön verbessert. Ich denke mal das wird sich auch im Traffic niederschlagen am Monatsende Die Eingangsfrage nach dem Überschreiben der Subdomains hat sich (leider) erledigt wegen oben erwähnter fehlender Wildcard-Fähigkeit des Webspace.

Damit wäre eine lange lange Baustelle auf unserer Firmenwebsite endlich beseitigt. Ich hatte immer die Wahl zwischen funktionierendem Browsercache und defekter Sprachumschaltung in IE und FF oder aber langsamer Website in allen Browsern und funktionierender Sprachumschaltung.
Bitte warten ..
Mitglied: Arano
15.07.2010 um 00:58 Uhr
Nabend

Was mich jetzt aber wundert: In deinem Fall scheint der Server einen Location-Redirect zu schicken. Bei mir macht das der Apache nicht wenn ich mit mod-rewrite was umschreibe. Dort bleibt der Link in der Browser-Adresszeile so stehen wie eingegeben bzw. angeklickt.

...vermutung ... recherche ... treffer !
Zitat von http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewriterule
The Substitution of a rewrite rule is the string that replaces the original URL-path that was matched by Pattern. The Substitution may be a:
...
Absolute URL
If an absolute URL is specified, mod_rewrite checks to see whether the hostname matches the current host. If it does, the scheme and hostname are stripped out and the resulting path is treated as a URL-path. Otherwise, an external redirect is performed for the given URL. To force an external redirect back to the current host, see the [R] flag below.
...

Fertig !?

~Arano
Bitte warten ..
Mitglied: Codehunter
15.07.2010 um 01:09 Uhr
Ok damit erklärt sich sowohl das Verhalten bei mir als auch bei dir Wie gesagt, das Subdomain-Umschreiben hat bei mir ja nie funktioniert, darum konnte ich ja nur Vermuten...

Aber zumindest mein Anstz der getrennten Browser-Caches durch Subdomains funktioniert super. Wenn ich auch die Dinger alle händisch anlegen musste wegen fehlender Wildcards.

Ich würd mal sagen, Problem gelöst Thx!
Bitte warten ..
Ähnliche Inhalte
Webentwicklung
gelöst Www bei einer Subdomain mittels htaccess erzwingen (7)

Frage von dodo-r zum Thema Webentwicklung ...

Webentwicklung
Webseiteninhalte auf Subdomains (4)

Frage von wescraven07 zum Thema Webentwicklung ...

Apache Server
gelöst Rewrite mit falschem Ordner (1)

Frage von rawb1t zum Thema Apache Server ...

Apache Server
gelöst htaccess Weiterleitung (4)

Frage von schneerunzel zum Thema Apache Server ...

Neue Wissensbeiträge
Multimedia

Raspberry Pi als Digital-Signage-Computer

(1)

Information von BassFishFox zum Thema Multimedia ...

Windows Update

Novemberpatches und Nadeldrucker bereiten Kopfschmerzen

(15)

Tipp von MettGurke zum Thema Windows Update ...

Windows 10

Abhilfe für Abstürze von CDPUsersvc auf Win10 1607 und 2016 1607

(7)

Tipp von DerWoWusste zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Router & Routing
Freigabe aus anderem Netz nicht erreichbar (31)

Frage von McLion zum Thema Router & Routing ...

Visual Studio
Vb.net-Tool zum Erzeugen einer Outlook-E-Mail (24)

Frage von ahstax zum Thema Visual Studio ...

Batch & Shell
Batch Programm verhalten bei shoutdown -p (19)

Frage von Michael-ITler zum Thema Batch & Shell ...

Windows Netzwerk
Netzwerk Neustrukturierung (15)

Frage von IT-Dreamer zum Thema Windows Netzwerk ...