sql >> Databáze >  >> RDS >> Mysql

Oddělte různé verze webu

Poznámka:Toto řešení je více o výkonu než o rychlé opravě a já jsem konečně hotový

Předpokládám, že protože používáte memcache, získáte svůj obsah z databáze MySQL, poté jej analyzujete v PHP a uložíte do mezipaměti a zobrazíte.

Každá verze by měla jinou doménu. iPhone/Android (a další smartphone) budou používat m.domain.com doména, tablety (iPad, galaxie atd...) budou používat t.domain.com , všechny ostatní budou používat o.domain.com a výchozí použije www.domain.com nebo domain.com .

Všechny tyto subdomény mohou odkazovat na stejnou složku (/var/www/ - výchozí). Co udělá trik, je, jak to nazvete.

Přidejte tuto konfiguraci .htaccess nebo apache:

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]

Takže ve svém souboru PHP můžete použít $_GET['subdomain'] a rozhodněte se, co musíte udělat pro vytvoření vaší stránky. Tímto způsobem se velmi snadno udržuje, máte 1 vstupní bod a můžete nastavit pravidla v PHP pro získání informací o tom, co potřebujete zobrazit (obsah bude stejný, změní se pouze rozvržení).

Jedna věc, kterou doporučuji, je optimalizace souborů. Mobilní verze vašeho webu by měla být v každém ohledu lehčí (CSS, Obrázky, JS). Nechcete, aby váš uživatel načítal velké CSS, JS a obrázky z mobilního zařízení s pomalou sítí. Chcete co nejvíce optimalizovat pro pomalejší síťové zařízení. Jinými slovy, nechcete zobrazovat logo 300x200 na 176x220 vyklápěcím telefonu. Jedním ze způsobů bude pojmenovat soubor podle domény, ve které se nachází. Například:

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

A v kódu PHP můžete mít logiku pro dynamické načítání souborů JS, obrázků a CSS. Pamatujte, že čím rychleji načtete svůj mobilní web, tím je lepší. Údržba je důležitá, ale vaši uživatelé také. Pokud máte pomalý mobilní web, budou mít tendenci na váš web nechodit a přejít jinam. Ne každý na svém telefonu používá 3G/4G síť nebo WiFi. Také doporučuji použít výstupní kompresi (jako deflate ), když chcete přistupovat ke svým souborům.

Tím se zlepší doba načítání, zejména pro mobilní zařízení. Nyní, pokud používáte stejné soubor, řekněme soubor Javascript pro odesílání zpráv, nechcete jej duplikovat ani kopírovat se jménem. Místo vytváření další logiky ve vašem PHP můžete vytvořit symbolický odkaz, jako je tento:

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

S tímto řešením budete muset přesměrovat na příslušnou stránku v závislosti na typu zařízení, které používají. Nechcete, aby vyklápěcí telefon zobrazoval verzi vašeho webu pro iPhone. Zde je pár triků, jak toho dosáhnout:

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

NEBO v konfiguraci .htaccess/apache na výchozím webu:

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

Doporučuji se podívat na http://detectmobilebrowsers.com/ a zjistěte, co můžete použít pro mobilní zařízení, a podívejte se na http://validator.w3.org /mobile/ abyste se ujistili, že vše vypadá dobře pro vaše mobilní zařízení.

Z běžných souborů PHP doporučuji použít centralizované místo, konkrétní cestu, kterou můžete použít a vnější svět ne. Celý tento kód můžete umístit do společné složky, kde mají všechny weby k těmto souborům přístup. Příklad:

/web/lib/

Tímto způsobem nikdo kromě vás nebude mít přímý přístup k vašim souborům. Ve vašem PHP kódu uděláte něco jako (například přihlašovací skript):

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


  1. Jak správně používat Oracle ORDER BY a ROWNUM?

  2. MYSQL JOIN na více tabulkách nevrací žádné výsledky

  3. Předání pole dotazu pomocí klauzule WHERE

  4. Změna roku v datu mysql