注意:这个解决方案更多的是性能比快速修复,我终于完成了
我假设,因为您使用memcache从MySQL数据库获取您的内容,然后解析它在PHP和保存到缓存和显示它。
每个版本都有不同的域。 iPhone / Android(和其他智能手机)将使用m.domain.com域,平板电脑(iPad,星系等…)将使用t.domain.com,所有其他人将使用o.domain.com和默认将使用www.domain.com或domain.com。
所有这些子域可以指向同一个文件夹(/ 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和图片。您希望尽可能优化较慢的网络设备。换句话说,您不想在176×220翻转手机设备上显示300×200徽标。一种方法是根据文件所在的域名命名文件。例如:
> 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)当你想访问您的文件。
这将提高您的加载时间,特别是对于移动设备。现在,如果你使用相同的文件,让我们说一个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();
}
OR在.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...
至于常见的PHP文件,我会建议使用集中的地方,一个特定的路径,你可以使用和外面的世界不能。您可以将所有这些代码放在一个公共文件夹中,所有网站都可以访问这些文件。例:
/ web / lib /
这样,除了你,没有人可以直接访问你的文件。在您的PHP代码中,您将执行类似的操作(例如登录脚本):
define('BASE_PATH', '/web/lib/');
require(BASE_PATH . 'filex.php');
// etc...