第二十二章 地区分站与 IP 跳转
地区分站只加城市入口,不是多份网站;访问落在哪个城市、三个开关、IP 定位库、新增城市与拼音重名。
分站不是多份网站
「地区分站」插件做的是一件事:给同一个站点加几个城市入口,让台州以外的访客也能看到带自己城市名的首页。程序、数据库、模板只有一套,城市目录里放的只是一个很小的入口壳。
| 城市 | 目录 | 城市 | 目录 |
|---|---|---|---|
| 椒江 | /JIAOJIANG/ | 温岭 | /WENLING/ |
| 黄岩 | /HUANGYAN/ | 玉环 | /YUHUAN/ |
| 路桥 | /LUQIAO/ | 临海 | /LINHAI/ |
| 三门 | /SANMEN/ | 仙居 | /XIANJU/ |
| 天台 | /TIANTAI/ |
每个目录里只有五样东西:andvar.asp、index.asp、list/、show/、search/。其中 andvar.asp 是唯一有差别的地方——它把 webroot 改成 /城市目录/,把 c_name 改成城市名。首页、列表、详情仍然走主站同一套程序与模板。
所以「改分站」和「改主站」是同一个动作:模板改一次全部分站生效。分站目录里的文件不要单独改,下次生成或升级会被覆盖,也会让两套行为分叉。
访问落在哪个城市
- 地址里带了城市:直接访问
/WENLING/,就是温岭分站。 - 访客手动选过:页头的城市切换会带上
?set_city=城市拼音,程序记一个user_citycookie,之后不再按 IP 改他的选择。 - 自动跳过一次:按 IP 跳转后会写
auto_city,避免访客每点一个页面就被跳一次。 - 都没有:按 IP 定位到最近的已开通城市,定位不到就留在主站。
三个开关
| 开关 | 在哪 | 作用 |
|---|---|---|
| IP 自动跳转 | 地区分站 → 设置(配置项 city_auto) | 本站为开启。关闭后仍可手动选城市,只是不再自动跳 |
| 可信代理 | 地区配置(配置项 ip_proxy) | 本站为空。为空时只认直连地址,不信任任何 X-Forwarded-For |
| 城市启用 | 插件里的城市列表(islock) | 关掉某个城市,它就退出切换列表,也不再作为跳转目标 |
IP 定位靠一个离线库
定位数据在 /plug/city/iplocation.mdb,是纯 IPv4 的离线库,查询在本机完成,不出网、不调用第三方接口。两条最常见的定位失败原因:
- 访客地址是内网或回环(
127.0.0.1、192.168.*):本机测试时必然看到这个结果,不代表线上也这样。 - 前面有 CDN 或反向代理:真实地址在
X-Forwarded-For里,但ip_proxy为空时程序不采信,于是把代理的地址当访客地址。要按 IP 跳转,必须把代理回源地址填进「可信代理」。
不要为了「测试方便」把 ip_proxy 填成 * 或任意值。那等于允许任何人伪造来源地址,既能绕过按地区的内容限制,也能污染访问统计。
新增一个城市
- 「功能 → 地区分站」新增城市,填城市名与拼音目录名(大写,例如
WENLING)。 - 在站点根目录建同名目录,把已有城市目录里的五个入口复制过去。
- 只改新目录的
andvar.asp:webroot与c_name换成新城市。 - 回到插件里重建定位索引,等缓存过期(约 5 分钟)后再测。
- 打开「地区分站」列表确认它已启用,再从前台切换列表点一次。
下线一个城市:先在城市列表里关掉,再把根目录下的城市目录改名(不要直接删,留一周观察),最后确认没有站内链接还指向它。
拼音重名与误匹配
城市目录名由拼音生成,而拼音表按 GBK 区位编码,天然会有同音。两个不同地名算出同一个目录名时,后建的会覆盖先建的。处理办法是给其中一个手填拼音目录名,不要指望程序自动区分。
另一个坑是「候选地名吞掉了上级地名」:例如「三门」会命中「三门峡」。程序现在的规则是——候选词前面被吞掉的部分必须恰好是一个完整的地名,才允许匹配。新增城市后如果发现跳错,先看这一条,再怀疑定位库。
给搜索引擎的分站地图
city.xml 是分站的站点地图,和主站的 sitemap1.xml 分开。它由插件生成,写入的是生成当时的站点网址;换域名后必须重新生成,否则里面还是旧地址。已经上线的站,生成后到百度/必应后台各提交一次即可。
常见问题
| 现象 | 先查什么 |
|---|---|
| 换了城市,首页标题没变 | 城市目录的 andvar.asp 里 c_name 是否改了;模板是否写死了城市名 |
| 一直不自动跳转 | city_auto 是否开启;访问地址是不是内网;是否有 user_city cookie |
| 跳到了错误的城市 | 先看是不是「三门 / 三门峡」这类前缀误匹配,再看定位库版本 |
| 分站打开没有样式 | 分站目录的 webroot 写错,CSS 路径被拼到了错误位置 |
| 切换列表里少了城市 | 该城市被停用,或缓存还没过期 |
接下来怎么读
- 要按地区给不同内容:先读第十二章,理解栏目结构再开分站栏目。
- 要限制某些地区访问:看第三十七章的访问限制。
- 分站地图与主站地图的关系:看第三十四章。
微信扫码聊需求