Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Trennen Sie verschiedene Versionen einer Website

Hinweis:Bei dieser Lösung geht es mehr um Leistung als um eine schnelle Lösung, und ich bin endlich fertig

Ich nehme an, da Sie Memcache verwenden, erhalten Sie Ihren Inhalt aus einer MySQL-Datenbank, parsen ihn dann in PHP und speichern ihn im Cache und zeigen ihn an.

Jede Version hätte eine andere Domain. iPhone/Android (und andere Smartphones) verwenden den m.domain.com Domain, Tablets (iPad, Galaxy usw.) verwenden t.domain.com , alle anderen verwenden o.domain.com und standardmäßig wird www.domain.com verwendet oder domain.com .

Alle diese Subdomains können auf denselben Ordner verweisen (/var/www/ - die Standardeinstellung). Was den Trick macht, ist, wie Sie es nennen.

Fügen Sie dies Ihrer .htaccess- oder Apache-Konfiguration hinzu:

SetEnvIf Host ^www\. page=www
SetEnvIf Host ^o\. page=others
SetEnvIf Host ^m\. page=mobile
SetEnvIf Host ^t\. page=tablets
rewriterule ^.*$ index.php?subdomain=%{ENV:page} [QSA,L]

In Ihrer PHP-Datei können Sie also den $_GET['subdomain'] verwenden und entscheiden Sie, was Sie tun müssen, um Ihre Seite zu generieren. Auf diese Weise ist es sehr einfach zu warten, Sie haben einen Einstiegspunkt und Sie können Regeln in PHP einrichten, um Informationen darüber abzurufen, was Sie anzeigen müssen (der Inhalt bleibt gleich, nur das Layout ändert sich).

Eine Sache, die ich empfehle, ist die Optimierung Ihrer Dateien. Die mobile Version Ihrer Website sollte in jeder Hinsicht schlanker sein (CSS, Bilder, JS). Sie möchten nicht, dass Ihre Benutzer große CSS, JS und Bilder von einem mobilen Gerät mit einem langsamen Netzwerk laden. Sie möchten so viel wie möglich für langsamere Netzwerkgeräte optimieren. Mit anderen Worten, Sie möchten kein 300 x 200-Logo auf einem 176 x 220-Flip-Phone-Gerät anzeigen. Eine Möglichkeit besteht darin, Ihre Datei basierend auf der Domäne zu benennen, in der sie sich befinden. Zum Beispiel:

  • file.css (4k) V.S. file-m.css (0.4k)
  • logo.jpg (300px * 300px 15k) VS. logo-m.jpg (100px * 40px 2k)

Und in Ihrem PHP-Code können Sie eine Logik zum dynamischen Laden von JS-, Bild- und CSS-Dateien haben. Denken Sie daran, je schneller Sie Ihre mobile Website laden, desto besser ist sie. Wartbarkeit ist wichtig, aber Ihre Benutzer sind es auch. Wenn Sie eine langsame mobile Website haben, werden sie dazu neigen, nicht auf Ihre Website zu gehen und woanders hinzugehen. Nicht jeder nutzt ein 3G/4G-Netzwerk oder WLAN auf seinem Telefon. Außerdem empfehle ich, die Ausgabekomprimierung zu verwenden (wie deflate ). ), wenn Sie auf Ihre Dateien zugreifen möchten.

Dies verbessert Ihre Ladezeit, insbesondere für mobile Geräte. Nun, wenn Sie dasselbe verwenden Datei, sagen wir eine Javascript-Datei zum Versenden eines Newsletters, Sie möchten sie weder duplizieren noch mit dem Namen kopieren. Anstatt eine zusätzliche Logik in Ihrem PHP zu erstellen, können Sie einen symbolischen Link wie diesen erstellen:

ln -s /var/www/js/file.js /var/www/js/file-m.js

Bei dieser Lösung müssen Sie je nach verwendetem Gerätetyp auf die entsprechende Website umleiten. Sie möchten nicht, dass ein Flip-Phone eine iPhone-Version Ihrer Website anzeigt. Hier ist ein paar Tricks, die Sie anwenden können, um dies zu erreichen:

// PHP version - also make sure the current domain is checked otherwise you will be in an infinite loop!
if(strpos($_SERVER['HTTP_USER_AGENT'],'iPhone') !== FALSE || strpos($_SERVER['HTTP_USER_AGENT'],'Android') !== FALSE)
{
  header('Location: http://m.domain.com/');
  exit();
}

ODER in der .htaccess/Apache-Konfiguration unter der Standardseite:

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} "iphone|android" [NC]
RewriteCond %{HTTP_HOST} !^mobile.domain.com
RewriteRule ^(.*)$ http://m.domain.com/ [L,R=301] # or 302 if you want temporary
# etc...

Ich empfehle einen Blick auf http://detectmobilebrowsers.com/ Um herauszufinden, was Sie für die mobilen Geräte verwenden können, können Sie http://validator.w3.org überprüfen /mobil/ um sicherzustellen, dass alles für Ihr mobiles Gerät gut aussieht.

Was die üblichen PHP-Dateien betrifft, empfehle ich, einen zentralen Ort zu verwenden, einen bestimmten Pfad, den Sie verwenden können und der die Außenwelt nicht verwenden kann. Sie können diesen gesamten Code in einem gemeinsamen Ordner ablegen, in dem alle Sites auf diese Dateien zugreifen können. Beispiel:

/web/lib/

Auf diese Weise kann niemand außer Ihnen direkt auf Ihre Dateien zugreifen. In Ihrem PHP-Code werden Sie so etwas tun (zum Beispiel das Anmeldeskript):

<?php
 define('BASE_PATH', '/web/lib/');
 require(BASE_PATH . 'filex.php');
 // etc...