Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Przekierowanie na stronę mobilną.
Forum PHP.pl > Forum > PHP
adams1692
Cześć, mam do Was pytanie dotyczące przekierowanie ze standardowej strony na stronę mobilną. Obecnie korzystam z takiego kodu:
  1. $useragent=$_SERVER['HTTP_USER_AGENT'];
  2. 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|haha.gifa|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)))
  3. header('Location: <a href="http://m.mglks.pl&#39%3b%29;" target="_blank">http://m.mglks.pl');</a>


Kod działa dobrze, jednak przekierowuje zawsze na na stronę główną wersji mobilnej czyli m.mglks.pl. Chciałbym żeby użytkownik wchodząc na stronę np. mglks.pl/news.php?readmore=111 został przekierowany na mobilną wersję czyli m.mglks.pl/news.php?readmore=111

Jesteście w stanie pomóc mi zmodyfikować ten kod, lub pokazać co i jak zrobić żeby to działało. Będę wdzięczny za pomoc. Pozdrawiam.
bostaf
Ten kod pasqdnie wygląda w poście, jakoś się dziwacznie poformatował. Ale to nie Twoja wina, tak piszę bo na początku nie widziałem w ogóle co się tam dzieje. W plaintekście jest czytelny.
A wracając do tematu, poczytaj o header, bo wydaje mi się, że nie czytałeś przed zadaniem pytania. Daj znać jak coś dalej nie będzie jasne.
adams1692
Dzięki za podpowiedź, jednak przyznam się że nie jestem mistrzem kodowania w PHP więc szczerze powiedziawszy nie mam pojęcia jak się za to zabrać...
bostaf
Cytat(adams1692 @ 2.06.2017, 08:29:07 ) *
Dzięki za podpowiedź, jednak przyznam się że nie jestem mistrzem kodowania w PHP więc szczerze powiedziawszy nie mam pojęcia jak się za to zabrać...

Nie poddawać się i czytać smile.gif
Zobacz co się w tym kawałku kodu dzieje:

Wiersz 1 - HTTP_USER_AGENT to łańcuch tekstowy, który każda przeglądarka przekazuje do serwera razem z innymi parametrami. Na przykład moja przeglądarka generuje taki HTTP_USER_AGENT: "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36". Analizując ten tekst można określić system operacyjny, przeglądarkę, wersje.

Wiersz 2 - to wyrażenie regularne, analizując HTTP_USER_AGENT sprawdza, czy użytkownik korzysta z wersji mobilnej czy nie.

Wiersz 3 - funkcja header z parametrem "Location: ..." wyśle do przeglądarki nakaz przekierowania na podany URL.

W tej chwili masz tam
Kod
header('Location: http://m.mglks.pl');

czyli za każdym razem kiedy ktoś kto używający mobilnej przeglądarki odwiedzi stronę, za którą masz ten kawałek kodu - zostanie przekierowany na adres "http://m.mglks.pl". I to musisz zmienić. Podpowiedź: echo, var_dump i
Kod
$_SERVER['REQUEST_URI'];

Pokombinuj i daj znać jeśli nadal coś jest niejasne.
adams1692
Jak na razie wymyśliłem coś takiego:
  1. $url = $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
  2.  
  3. if ($url == "mglks.pl/contact.php") {
  4.  
  5. header('Location: <a href="http://m.mglks.pl/contact.php&#39%3b%29;" target="_blank">http://m.mglks.pl/contact.php');</a>
  6.  
  7. } else {
  8.  
  9. header('Location: <a href="http://m.mglks.pl&#39%3b%29;" target="_blank">http://m.mglks.pl');</a>
  10.  
  11. }



Jednak średnio to działa, bo cały czas przekierowuje na stronę mobilną nawet z komputera.
bostaf
Nie nie. Ten kod z Twojego pierwszego posta jest OK. Zmienić musisz tylko w trzecim wierszu "Location: http://m.mglks.pl" na "Location: coś innego".
Podpowiedzi były do przeanalizowania i potestowania. Rzuć sobie $_SERVER['REQUEST_URI'] do var_dumpa albo echo i obserwuj co pokazują na różnych adresach.

Cel: w każdym adresie chcesz wstawić "m." do urla. Czyli musisz pobrać aktualny URL, wstawić to "m." między "//" a "mglks" i umieścić taki nowy url po "Location: ", zamiast urla, który jest tam w tej chwili.
adams1692
Chyba mam:
  1. header('Location: <a href="http://m.mglks.pl'.$_SERVER" target="_blank">http://m.mglks.pl'.$_SERVER</a>['REQUEST_URI']);


Przekierowanie działa dobrze, jeszcze muszę dodać odpowiednie nazwy do folderu m.mglks.pl

Tylko teraz jeszcze mam takie pytanie. Powiedzmy ktoś wchodzi na telefon ze strony www.mglks.pl/aktualnosci.php a podanej strony nie ma w wersji mobilnej, więc jak to zrobić żeby kiedy podana strona istnieje tylko w wersji standardowej, użytkownik został przekierowany na stronę główną mobilnej wersji czyli m.mglks.pl?
Niree
Sprawdź to w PHP i przekieruj na odpowiednią stronę. Albo w pliku aktualnosci.php.
bostaf
Cytat(adams1692 @ 2.06.2017, 15:32:04 ) *
Powiedzmy ktoś wchodzi na telefon ze strony www.mglks.pl/aktualnosci.php a podanej strony nie ma w wersji mobilnej, więc jak to zrobić żeby kiedy podana strona istnieje tylko w wersji standardowej, użytkownik został przekierowany na stronę główną mobilnej wersji czyli m.mglks.pl?


  1. if ($mobilna_istnieje)
  2. header('Location: wersja mobilna');
  3. else
  4. header('Location: mobilna-home');

Pytanie tylko: skąd wiadomo, że wersja mobilna danego urla istnieje? Tylko Ty - programista - to wiesz. Jeśli jesteś w stanie odpowiedzieć na to pytanie, to będziesz w stanie zaprogramować zmienną $mobilna_istnieje.
Puszy
Cytat(adams1692 @ 2.06.2017, 15:32:04 ) *
Chyba mam:
  1. header('Location: http://m.mglks.pl'.$_SERVER['REQUEST_URI']);


Przekierowanie działa dobrze, jeszcze muszę dodać odpowiednie nazwy do folderu m.mglks.pl


Ten header() działa? I działa dobrze?
Pyton_000
A czemu ma nie działać?
Puszy
Coś mi się źle wyświetliło, BBCode chyba coś namieszał. U mnie post wygląda tak jak poniżej, o dziwo przy cytowaniu wyszło poprawnie:


Pyton_000
Tak, bbcode tak ma smile.gif
arturbrzoza
Ja nie jestem mistrzem PHP, ale mogę polecić kolegę, który dobrze się na tym zna http://www.informatyk-szczecin.com/ może on coś doradzi.
Pyton_000
A bana za takie perfidne spamowanie chce?
TurekBurek
Ziomuś masz kodzik na bank działa sma go mam a jeśli jakiegoś systemu nie mam po prostu go dopisujesz biggrin.gif w body jak wkleisz też będzie dobrze
  1. <?php
  2. function is_mobile(){
  3. $regex_match="/(nokia|iphone|android|motorola|^mot\-|softbank|foma|docomo|kddi|up\.browser|up\.link|";
  4. $regex_match.="htc|dopod|blazer|netfront|helio|hos in|huawei|novarra|CoolPad|webos|techfaith|palmsour ce|";
  5. $regex_match.="blackberry|alcatel|amoi|ktouch|nexi an|samsung|^sam\-|s[cg]h|^lge|ericsson|philips|sagem|wellcom|bunjalloo|ma ui|";
  6. $regex_match.="symbian|smartphone|midp|wap|phone|w indows ce|iemobile|^spice|^bird|^zte\-|longcos|pantech|gionee|^sie\-|portalmmm|";
  7. $regex_match.="jig\s browser|hiptop|^ucweb|^benq|haier|^lct|opera\s*mob i|opera\*mini|320x320|240x320|176x220";
  8. $regex_match.=")/i";
  9. return isset($_SERVER['HTTP_X_WAP_PROFILE']) or isset($_SERVER['HTTP_PROFILE']) or preg_match($regex_match, strtolower($_SERVER['HTTP_USER_AGENT']));
  10. }
  11.  
  12. switch($_GET['mode'])
  13. {
  14. case 'mobile':
  15. $mode = "mobile";
  16. break;
  17. case 'desktop':
  18. $mode = "desktop";
  19. break;
  20. default:
  21. $mode = is_mobile() ? "mobile" : "desktop";
  22. break;
  23. }
  24.  
  25. if ($mode == "mobile")
  26. {
  27. header ("Location: Tu wpisz adres na stronę mobilną");
  28. return;
  29. }
  30. ?>


Polecam nie pożałujesz tongue.gif
freewalker
a nie lepiej zamiast budować nową stronę typowo dla mobile to przerobić starą stronę tak, aby była w 100% responsywną? Wtedy nie trzeba dopisywać nowych urządzeń, jak pojawi się na rynku coś niespodziewanego ;P
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.