注意:这个解决方案更多的是关于性能而不是快速修复,我终于完成了
我假设由于您使用的是 memcache,因此您从 MySQL 数据库中获取内容,然后在 PHP 中对其进行解析并将其保存到缓存中并显示它。
每个版本都有不同的域。 iPhone/Android(和其他智能手机)将使用m.domain.com 域,平板电脑(iPad、galaxy 等...)将使用t.domain.com,所有其他设备将使用o.domain.com,默认将使用www.domain.com 或@987654328 @。
所有这些子域都可以指向同一个文件夹(/var/www/ - 默认文件夹)。关键在于你如何称呼它。
将此添加到您的 .htaccess 或 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]
因此,在您的 PHP 文件中,您可以使用 $_GET['subdomain'] 并决定您需要做什么来生成您的页面。这样,很容易维护,你有 1 个入口点,你可以在 PHP 中设置规则来检索你需要显示的信息(内容是一样的,只是布局会改变)。
我推荐的一件事是优化您的文件。您网站的移动版本在任何方面(CSS、图像、JS)都应该更轻巧。您不希望您的用户从网络速度较慢的移动设备加载大型 CSS、JS 和图像。您希望尽可能针对较慢的网络设备进行优化。换句话说,您不想在 176x220 翻盖手机设备上显示 300x200 徽标。一种方法是根据文件所在的域命名您的文件。例如:
- file.css (4k) V.S. file-m.css (0.4k)
- logo.jpg (300px * 300px 15k) V.S. logo-m.jpg (100px * 40px 2k)
在您的 PHP 代码中,您可以有一个逻辑来动态加载 JS、图像和 CSS 文件。请记住,加载移动网站的速度越快,它就越好。可维护性很重要,但您的用户也很重要。如果您的移动网站速度较慢,他们会倾向于不访问您的网站而去其他地方。并非所有人都在手机上使用 3G/4G 网络或 WiFi。另外,我建议您在要访问文件时使用输出压缩(如deflate)。
这将缩短您的加载时间,特别是对于移动设备。现在,如果您使用 same 文件,比如说一个用于提交新闻信件的 Javascript 文件,您不想复制它,也不想复制它的名称。您可以像这样创建符号链接,而不是在 PHP 中创建额外的逻辑:
ln -s /var/www/js/file.js /var/www/js/file-m.js
使用此解决方案,您需要根据他们使用的设备类型重定向到适当的站点。您不希望翻盖手机查看您网站的 iPhone 版本。您可以通过以下几个技巧来完成此操作:
// 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();
}
或在默认站点下的 .htaccess/apache 配置中:
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...
我建议查看http://detectmobilebrowsers.com/ 以了解您可以在移动设备上使用什么,您可以查看http://validator.w3.org/mobile/ 以确保一切都适合您的移动设备。
对于常见的PHP文件,我会推荐使用一个集中的地方,一个特定的路径你可以使用而外界不能。您可以将所有这些代码放在所有站点都可以访问这些文件的公共文件夹中。示例:
/web/lib/
这样,除了您之外,没有人可以直接访问您的文件。在您的 PHP 代码中,您将执行类似的操作(例如登录脚本):
<?php
define('BASE_PATH', '/web/lib/');
require(BASE_PATH . 'filex.php');
// etc...