sql >> Database teknologi >  >> RDS >> Mysql

Separat anden version af et websted

Bemærk:denne løsning handler mere om ydeevne end om hurtig løsning, og jeg er endelig færdig

Jeg går ud fra, da du bruger memcache, du henter dit indhold fra en MySQL-database, og derefter analyserer det i PHP og gemmer det i cachen og viser det.

Hver version ville have et andet domæne. iPhone/Android (og anden smartphone) vil bruge m.domain.com domæne, tablets (iPad, galakse osv...) vil bruge t.domain.com , vil alle andre bruge o.domain.com og standarden vil bruge www.domain.com eller domain.com .

Alle disse underdomæner kan pege på den samme mappe (/var/www/ - standarden). Hvad der vil gøre tricket er, hvordan du kalder det.

Tilføj denne din .htaccess- eller apache-konfiguration:

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]

Så i din PHP-fil kan du bruge $_GET['subdomain'] og beslutte, hvad du skal gøre for at generere din side. På denne måde er det meget nemt at vedligeholde, du har 1 indgangspunkt, og du kan opsætte regler i PHP for at hente information om, hvad du skal vise (indholdet vil være det samme, kun layoutet ændres).

En ting, jeg anbefaler, er at optimere dine filer. Mobilversionen af ​​dit websted skal være lettere på nogen måde (CSS, billeder, JS). Du ønsker ikke, at din bruger skal indlæse store CSS, JS og billeder fra en mobilenhed med et langsomt netværk. Du ønsker at optimere så meget som muligt for langsommere netværksenheder. Med andre ord, du ønsker ikke at vise et 300x200 logo på en 176x220 flip-telefonenhed. En måde vil være at navngive din fil baseret på det domæne, de er i. For eksempel:

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

Og i din PHP-kode kan du have en logik til dynamisk at indlæse JS, billeder og CSS-filer. Husk, at jo hurtigere du indlæser din mobilside, jo bedre er den. Vedligeholdelse er vigtig, men det er dine brugere også. Hvis du har en langsom mobilside, vil de tendens til ikke at gå til dit websted og gå et andet sted hen. Ikke alle bruger 3G/4G-netværk eller WiFi på deres telefon. Jeg anbefaler også at bruge output-komprimering (som deflate ), når du vil have adgang til dine filer.

Dette vil forbedre din indlæsningstid, specielt for de mobile enheder. Nu, hvis du bruger den samme fil, lad os sige en Javascript-fil til at indsende nyhedsbreve, du ønsker ikke at duplikere den eller kopiere den med navnet. I stedet for at skabe en ekstra logik i din PHP, kan du oprette et symbolsk link som dette:

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

Med denne løsning skal du omdirigere til det relevante websted afhængigt af den type enhed, de bruger. Du ønsker ikke en flip-telefon se en iPhone-version af dit websted. Her er et par tricks, du kan gøre for at opnå dette:

// 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();
}

ELLER i .htaccess/apache-konfigurationen under standardwebstedet:

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...

Jeg anbefaler at kigge på http://detectmobilebrowsers.com/ for at finde ud af, hvad du kan bruge til de mobile enheder, og du kan tjekke http://validator.w3.org /mobil/ for at sikre, at alt ser godt ud til din mobilenhed.

Hvad angår de almindelige PHP-filer, vil jeg anbefale at bruge et centraliseringssted, en specifik sti, du kan bruge, og omverdenen kan ikke. Du kan lægge al denne kode i en fælles mappe, hvor alle websteder kan få adgang til disse filer. Eksempel:

/web/lib/

På denne måde kan ingen, undtagen dig, få direkte adgang til dine filer. I din PHP-kode vil du gøre noget som (for eksempel login-scriptet):

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


  1. Hvordan får jeg adgang til Oracle fra Python?

  2. Tvinge en forespørgselstimeout i SQL Server

  3. Indekserer MySQL fremmednøglekolonner automatisk?

  4. Find antallet af TOM- eller NULL-kolonner i en MySQL-tabel