Lưu ý:giải pháp này thiên về hiệu suất hơn là sửa chữa nhanh và cuối cùng tôi đã hoàn thành
Tôi giả sử vì bạn đang sử dụng memcache nên bạn lấy nội dung của mình từ Cơ sở dữ liệu MySQL, sau đó phân tích cú pháp nó trong PHP và lưu vào bộ nhớ đệm và hiển thị.
Mỗi phiên bản sẽ có một miền khác nhau. iPhone / Android (và điện thoại thông minh khác) sẽ sử dụng m.domain.com
miền, máy tính bảng (iPad, galaxy, v.v.) sẽ sử dụng t.domain.com
, tất cả những người khác sẽ sử dụng o.domain.com
và mặc định sẽ sử dụng www.domain.com
hoặc domain.com
.
Tất cả các miền phụ này có thể trỏ đến cùng một thư mục (/var/www/
- mặc định). Điều gì sẽ làm nên mẹo là cách bạn gọi nó.
Thêm cấu hình này .htaccess hoặc apache của bạn:
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]
Vì vậy, trong tệp PHP của bạn, bạn có thể sử dụng $_GET['subdomain']
và quyết định những gì bạn cần làm để tạo trang của mình. Bằng cách này, nó rất dễ bảo trì, bạn có 1 điểm vào và bạn có thể thiết lập các quy tắc trong PHP để truy xuất thông tin về những gì bạn cần hiển thị (nội dung sẽ giống nhau, chỉ có bố cục thay đổi).
Một điều tôi khuyên bạn nên tối ưu hóa các tệp của bạn. Phiên bản di động của trang web của bạn phải tốt hơn theo bất kỳ cách nào (CSS, Hình ảnh, JS). Bạn không muốn người dùng của mình tải CSS, JS và hình ảnh lớn từ thiết bị di động có mạng chậm. Bạn muốn tối ưu hóa càng nhiều càng tốt cho thiết bị mạng chậm hơn. Nói cách khác, bạn không muốn hiển thị logo 300x200 trên thiết bị điện thoại nắp gập 176x220. Một cách sẽ là đặt tên tệp của bạn dựa trên miền của chúng. Ví dụ:
- file.css (4k) V.S. file-m.css (0,4k)
- logo.jpg (300px * 300px 15k) V.S. logo-m.jpg (100px * 40px 2k)
Và trong mã PHP của bạn, bạn có thể có một logic để tải động các tệp JS, Hình ảnh và CSS. Hãy nhớ rằng, bạn tải trang web dành cho thiết bị di động của mình càng nhanh thì trang web đó càng tốt. Khả năng bảo trì là quan trọng nhưng người dùng của bạn cũng vậy. Nếu bạn có một trang web di động chậm, họ sẽ có xu hướng không truy cập trang web của bạn và đi đến một nơi khác. Không phải ai cũng đang sử dụng mạng 3G / 4G hoặc WiFi trên điện thoại của họ. Ngoài ra, tôi khuyên bạn nên sử dụng tính năng nén đầu ra (như deflate ) khi bạn muốn truy cập tệp của mình.
Điều này sẽ cải thiện thời gian tải của bạn, đặc biệt đối với các thiết bị di động. Bây giờ, nếu bạn sử dụng giống nhau , giả sử một tệp Javascript để gửi một bức thư tin tức, bạn không muốn sao chép nó cũng như sao chép nó với tên. Thay vì tạo thêm một logic trong PHP, bạn có thể tạo một liên kết tượng trưng như sau:
ln -s /var/www/js/file.js /var/www/js/file-m.js
Với giải pháp này, bạn sẽ cần phải chuyển hướng đến trang web thích hợp tùy thuộc vào loại thiết bị họ sử dụng. Bạn không muốn điện thoại nắp gập xem phiên bản iPhone của trang web của mình. Đây là một vài thủ thuật bạn có thể làm để thực hiện điều này:
// 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();
}
HOẶC trong cấu hình .htaccess / apache dưới trang web mặc định:
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...
Tôi khuyên bạn nên xem http://detectmobileb Duyệt.com/ để tìm hiểu những gì bạn có thể sử dụng cho thiết bị di động và bạn có thể kiểm tra http://validator.w3.org / mobile / để đảm bảo mọi thứ đều ổn cho thiết bị di động của bạn.
Đối với các tệp PHP phổ biến, tôi sẽ khuyên bạn nên sử dụng một nơi tập trung, một đường dẫn cụ thể mà bạn có thể sử dụng và thế giới bên ngoài thì không. Bạn có thể đặt tất cả mã này trong một thư mục chung, nơi tất cả các trang web có thể truy cập các tệp này. Ví dụ:
/web/lib/
Bằng cách này, không ai, ngoại trừ bạn, có thể truy cập trực tiếp vào các tệp của bạn. Trong mã PHP của bạn, bạn sẽ làm một cái gì đó như (ví dụ:tập lệnh đăng nhập):
<?php
define('BASE_PATH', '/web/lib/');
require(BASE_PATH . 'filex.php');
// etc...