Switch zu Subdomain bei mobilen Endgeräten realisieren

godlike

Warp drölf
Veteran
Registriert
13 Juli 2013
Beiträge
14.290
Ort
Topkekistan
Jau, darum gehts.

Ich hab hier ne Webseite die nicht responsible fähig ist. Das lässt sich so schnell auch nicht ändern da es dazu keine Zeit gibt und die Seite dazu auch weitreichend geändert werden müsste. Nun hab ich mir mit einem Workaround geholfen.

[src=php]function mobile_or_not($site) {
$useragent=$_SERVER['HTTP_USER_AGENT'];
if(preg_match('/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i',$useragent)||preg_match('/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i',substr($useragent,0,4))) {
header('Location: http://m.domain.com/'.$site.'');
exit();
}
}[/src]
Funktioniert auch wunderbar. Hab eine sehr vereinfachte Seite in die Subdomain gepackt. Fein.

Nun wollte ich aber einen Link zur normalen Desktop-Version einbauen. Nur wenn ich auf den Link klicke, vom Handy natürlich, greift ja wieder die Funktion von oben und zack bin ich wieder auf der Mobilen Seite :coffee:

Meien Idee wäre nun gewesen da einen Cookie zu setzen - nur weiß ich nicht ob die Idee so gut ist oder ob es eine einfachere Lösung dafür gibt :unknown:

Habt ihr dazu irgendwelche schlauen Ideen?

Gruß godlike
 
Wenn du es pur mit PHP realisieren willst, ist das der Weg. Für User ohne Cookies wirds haarig. Andere Möglichkeiten wären noch über localStorage (JS) oder eine get variable, die dann aber an jeden internen Link angehängt werden muss. Oder du machst direkt eine PHP Session.
 
Wenn du an den Link zB ein GET anhängst, kannst du unterscheiden. Oder du überprüfst die verweisende Seite.
 
@eraser dann muss er aber im Quellcode jeden Link ändern. Und das Problem ist natürlich, dass es dann bei Verschicken des Links erst gar nicht überprüft, ob der andere User evtl. ein Mobilgerät hat.
 
  • Thread Starter Thread Starter
  • #5
Gut, das könnte ich evtl mit Modrewrite machen. Ist mir aber evtl zu umständlich bzw. die ganzen "alten" Links würden ja ungültig. Und das sind an die 50000 :(

Denke ich versuche was mit Cookie oder Sessions.

kann ja was zu
[src=php]
if(preg_match('/blahblah')) {
header('Location: http://m.domain.com/'.$site.'');
$mobil = 1;
exit();
} else {
$mobil = 0;
}
[/src]
oder so basteln :unknown:
 
Ist halt alles eine Frage, wie sauber die Seite programmiert ist. Wenn das alles statisch ist, würde sich ggfl. grundsätzlich mal eine Überarbeitung lohnen.
 
  • Thread Starter Thread Starter
  • #7
Das ist nicht statisch. Daten aus einer bzw. mehreren DBs, URLs werden in Mod-Rewrite angepasst. Darum will ich von den URLs die Finger weg lassen. Ist eh nur eine temporäre Lösung da es eine App dazu geben wird.
 
Logisch sind die URLs statisch, sonst wäre die Sache ja in ner Minute erledigt. Woher die da kommen, interessiert nicht.

Nicht statisch wäre "$http$domainname$seitenaufruf$lustigesExtra".
 
  • Thread Starter Thread Starter
  • #9
Die URLs werden durch eine Datenbank generiert. blah.com/$var1/$var2/$blubb.html

Ok, da könnte ich dann schon was dran hängen. Aber was wäre dann großartig anders als wenn ich das über ne Subdomain löse? Ich hab die mobile Seite ja so halt schon fertig auf der Subdomain liegen. Wollte nur noch einen Link wegen der Desktopansicht ergänzen. Das Andere läuft so schon ne Weile.
 
Eventuell kannst du auch eine Marke an die URL hängen #mobile #desktop
Dann kannst du natürlich sonst nicht mehr damit arbeiten. Alternativ ?v=desktop ?v=mobile.
Beides lässt sich auch über JavaScript auslesen/ kontrollieren.
 
Pack die Logik doch in die .htaccess Datei.
Existiert eine Seite *nicht* in deiner mobilen Seite, so erstellst du einfach eine 404, wo der alte Link (müsste ja im Refererer drin stehen) nochmal auftaucht, und dich auf die Desktop-Seite schickt.

Da du auf die .htaccess wieder gerätst, kannst du dir allerdings auch die Query angucken (GET Parameter) und also auch einen Request dann "durch"lassen, obwohl mobil.
 
Zurück
Oben