宝塔后台,nginx+php+mysql
pc端域名 www.sf.com 和 手机端域名 m.sf.com 绑定在同一个目录下;
页面伪静态,为了实现双端访问效果,采用php函数 判断http_host是否是字母’m’开头,调用对应css并修改相应url的http_host。
函数如下:
function m_url($str){ $http_host = htmlentities($_SERVER['HTTP_HOST'], ENT_QUOTES, 'UTF-8'); $is_shouji = substr($http_host, 0, 1) === 'm'; if($is_shouji == "m"){ $m_url = preg_replace('/^(https?:)?(\/\/)(?!m)(.*)$/i', '$1$2m$3', $str); }else{ $m_url = $str; } return $m_url; }
http_host = m.sf.com 时插入m.css,用m_url替换所有A链接;
伪静态下,一切正常,开启缓存后就不行了。
—【缓存后,无法执行函数,链接全部显示成pc地址了】
请问,有什么好的方案?
不同域名返回同一个 index.html。
在 head 部分使用 js 判断域名,根据不同域名给 body
标签添加不同 class。
在 CSS 文件中根据 body
的 className 分别应用不同规则。
Nginx 配置一下:
http { ... proxy_cache_path /path/to/your/cache/pc levels=1:2 keys_zone=pc_cache:10m; proxy_cache_path /path/to/your/cache/mobile levels=1:2 keys_zone=mobile_cache:10m; ... } server { ... location / { ... if ($http_host ~* ^m\.sf\.com$) { proxy_cache mobile_cache; } if ($http_host ~* ^www\.sf\.com$) { proxy_cache pc_cache; } ... } }
php:
// 修改你的缓存键生成函数 function generate_cache_key() { $http_host = htmlentities($_SERVER['HTTP_HOST'], ENT_QUOTES, 'UTF-8'); return $http_host . '_' . $other_variables; }