Zur Navigation

Umleitung mobile Website und zurück

1 alisha

Hallo,

ich habe per htaccess eine Umleitung zu einer mobilen Website eingerichtet:
RewriteCond %{HTTP_HOST} !^mobil.meinedomain.de$
RewriteCond %{HTTP_USER_AGENT} ^.*iPhone.*$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^.*iPod.*$ [OR]
...
RewriteCond %{HTTP_USER_AGENT} ^.*Symbian.*$
RewriteRule ^(.*)$ http://mobil.meinedomain.de [R=301,L]

Nun möchte ich aber von der mobilen Website auch einen Link anbieten, der die reguläre Website im Smartphone anzeigt. Da darf dann die obengenannte Umleitung nicht mehr greifen.

Wie könnte ich das realisieren? Geht das überhaupt per htaccess?
Zuerst dachte ich an einen Parameter, den ich dem Link mitgeben könnte, aber wenn der User dann innerhalb der regulären Website surft, geht dieser ja wieder verloren...

Zur Not müsste ich eine Dialogbox anzeigen lassen, wenn ein mobilgerät die normale Website aufruft, die den User dann frägt, welche Version er besuchen will - aber auch das wäre ja nervig, wenn diese Abfrage bei jedem Seitenaufruf kommt...

Hat jemand eine Idee? Ich hätte gerne eine htaccess-Lösung, weil die Javascript-Varianten, die ich ausprobiert habe, zu lange dauern, da wird zuerst die normale Website geladen bis das Script ausgeführt wird (was bei großen Typo3-Sites schon mal ne Weile dauern kann beim Smartphone...)

Danke und Gruß

18.05.2012 13:58

2 Jörg Kruse

Eine Möglichkeit wäre es vielleicht, den Link über einen PHP-Redirect gehen zu lassen, welcher einen Cookie setzt. Wenn dieser Cookie vorhanden ist, wird auf der Zielseite nicht zurück auf die mobile Version geleitet. Also in etwa so (ungetestet):

<?php

setcookie("no_mobile_redirect", 1);
header("Location: http://example.com/");
exit();

?>

RewriteCond %{HTTP_HOST} !^mobil.meinedomain.de$
RewriteCond %{HTTP_COOKIE} !no_mobile_redirect=1
RewriteCond %{HTTP_USER_AGENT} ^.*iPhone.*$ [OR]

Das ganze funktioniert allerdings nicht, wenn der Besucher Cookies deaktiviert hat

18.05.2012 16:05

1 Forenmitglied fand diesen Beitrag gut

3 alisha

Hallo Jörg,
vielen Dank für deine Antwort.
Das mit dem Cookie setzen in der umleitung ist eine gute Idee, nur klappt die Condition in htaccess nicht, die wird irgendwie ignoriert.
Ich hab zudem noch das Problem, dass ich zwei Domains habe, die ich getrennt steuern muss. Ich müsste also noch eine weitere Condition setzen i.S.v.
RewriteCond %{HTTP_HOST} ^domain1.com$
RewriteCond %{HTTP_HOST} !^mobil.domain1.com$
RewriteCond %{HTTP_COOKIE} !no_mobile_redirect1=1
RewriteCond %{HTTP_USER_AGENT} ^.*iPhone.*$ [OR]
...
RewriteRule ^(.*)$ http://mobil.domain1.de [R=301,L]

und
RewriteCond %{HTTP_HOST} ^domain2.com$
RewriteCond %{HTTP_HOST} !^mobil.domain2.com$
RewriteCond %{HTTP_COOKIE} !no_mobile_redirect2=1
RewriteCond %{HTTP_USER_AGENT} ^.*iPhone.*$ [OR]
...
RewriteRule ^(.*)$ http://mobil.domain2.de [R=301,L]

Muss man die Condition vielleicht irgendwie verknüpfen? die anderen sind ja mit "OR" verknüpft... Ich hab bissl rumprobiert, aber ich hab einfach zu wenig Ahnung ...

18.05.2012 21:38 | geändert: 18.05.2012 21:50

4 Jörg Kruse

Wenn kein [OR] Flag angegeben ist, werden die Bedingungen mit AND verknüpft

Die Cookies sind auch wirklich mit dem Namen gesetzt?

Ich würde zur Sicherheit auch nochmal den Browser-Cache leeren, damit der Browser die Weiterleitung nicht aus seinem Cache lädt.

18.05.2012 21:56

1 Forenmitglied fand diesen Beitrag gut

5 alisha

Ja, der Cookie wird gesetzt, das hab ich überprüft...
und auch den browsercache geleert...
funktioniert leider nicht... obwohl es so schön logisch zu sein scheint :-)

18.05.2012 22:07

6 Jörg Kruse

Ich kann da keinen Fehler entdecken (außer dass einige Punkte nicht maskiert sind, was hier aber wohl nicht relevant ist). Von der Cookie-Bedingung abgesehen funktioniert die Weiterleitung wie erwartet?

18.05.2012 22:16

1 Forenmitglied fand diesen Beitrag gut

7 alisha

ja, wenn ich nur die Umleitung nach User-Agent reinmache, funktioniert alles.
Auch die Umleitungen ohne www zu www funktionieren..

wenn ich aber eine zweite Condition dazu nehme zu diesem hier:
RewriteCond %{HTTP_HOST} !^mobil.domain2.com$

egal ob nun die Cookieabfrage oder ob die Abfrage nach der Domain:

RewriteCond %{HTTP_HOST} ^domain2.com$
RewriteCond %{HTTP_HOST} !^mobil.domain2.com$

weitere Bedingungen werden ignoriert.. (es werden dann beide Domains auf die Mobilversion umgeleitet, egal ob Cookie gesetzt ist oder nicht)

hab es auch mit unterschiedlichen Reihenfolge ausprobiert, das ändert nichts...habe auch nur mal auf Existenz des cookies gefragt (ohne =1)
- keine Änderung...

hier mal noch der komplette Code der htaccess:
<FilesMatch "\.js\.gzip$">
 AddType "text/javascript" .gzip
</FilesMatch>
<FilesMatch "\.css\.gzip$">
  AddType "text/css" .gzip
</FilesMatch>
AddEncoding gzip .gzip

RewriteEngine On
RewriteBase /
RewriteRule ^(typo3|typo3temp|typo3conf|t3lib|tslib|fileadmin|uploads|showpic\.php)/ - [L]
RewriteRule ^typo3$ typo3/index_re.php [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule .* /index.php [L] 



RewriteCond %{HTTP_HOST}  ^domain2\.com
RewriteRule .* http://www.domain2.com/ [R=301,L]

RewriteCond %{HTTP_HOST}  ^domain1\.com
RewriteRule .* http://www.domain1.com/ [R=301,L]

RewriteCond %{HTTP_HOST}  ^domain1\.com
RewriteCond %{HTTP_HOST} !^mobil.domain1.com$
RewriteCond %{HTTP_COOKIE} !no_mobile_redirect=1
RewriteCond %{HTTP_USER_AGENT} ^.*iPhone.*$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^.*iPod.*$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^.*Android.*$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^.*IEMobile.*$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^.*Blackberry.*$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^.*Palm.*$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^.*NetFront.*$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^.*MIDP.*$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^.*UP\.Browser.*$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^.*Symbian.*$ 
RewriteRule ^(.*)$ http://mobil.domain1.com [R=301,L]

18.05.2012 22:25

8 Jörg Kruse

Grundsätzlich würde ich alle Weiterleitungen oberhalb der Typo3-Umschreibungen platzieren.

Die zweite Bedingung kannst du dir hier eigentlich schenken, die ergibt sich schon aus der ersten:

RewriteCond %{HTTP_HOST}  ^domain1\.com
RewriteCond %{HTTP_HOST} !^mobil.domain1.com$

Mehr fällt mir da nicht auf

18.05.2012 22:39

1 Forenmitglied fand diesen Beitrag gut

9 alisha

Mir kam grad noch der Gedanke, ob ich dem Cookie vielleicht noch was mitgeben muss und tatsächlich: Ich muss ihm Pfad und Domain mitgeben, dann wird er auch gefunden.
setcookie("no_mobile_redirect", 1, 0, "/", "domain1.com");

Zu deiner Antwort:
aber es ist doch so, dass ich zwei Domains hier laufen habe mit jeweils einer eigenen Mobilseite, deshalb war mein Gedanke, dass es eine Bedingung geben muss, die die Hauptdomain abfragt
RewriteCond %{HTTP_HOST} ^domain1\.com
und ausschließt, dass der Aufruf schon von der Mobilseite kommt, sonst gibts eine Endlosschleife..
RewriteCond %{HTTP_HOST} !^mobil.domain1.com$
und dann bei entsprechenden User-agenten zur jeweiligen mobilen Seite umleitet...

18.05.2012 22:46

10 Jörg Kruse

Mir kam grad noch der Gedanke, ob ich dem Cookie vielleicht noch was mitgeben muss und tatsächlich: Ich muss ihm Pfad und Domain mitgeben, dann wird er auch gefunden.
setcookie("no_mobile_redirect", 1, 0, "/", "domain1.com");

Ja, wenn der Cookie in einem Unterverzeichnis gesetzt wird, ist das wohl notwendig

aber es ist doch so, dass ich zwei Domains hier laufen habe mit jeweils einer eigenen Mobilseite, deshalb war mein Gedanke, dass es eine Bedingung geben muss, die die Hauptdomain abfragt
RewriteCond %{HTTP_HOST} ^domain1\.com
und ausschließt, dass der Aufruf schon von der Mobilseite kommt, sonst gibts eine Endlosschleife..
RewriteCond %{HTTP_HOST} !^mobil.domain1.com$

Die erste Bedingung besagt, dass der Host mit dem String domain1.com beginnt - beachte hier das Begrenzungszeichen "^"! der Host mobil.domain1.com erfüllt schon die erste Bedingung nicht

18.05.2012 22:52 | geändert: 18.05.2012 22:53

1 Forenmitglied fand diesen Beitrag gut