网站不使用 CDN 时一切正常,使用 CDN 时,主页 /index.php ,会被解析到同目录下的 /index1.php (刚开始正常,多人多刷新几次就会解析到 /index1.php ) NGINX rewrite 规则如下:
if (-f $request_filename/index.php){ rewrite (.) $1/index.php break; } if (-f $request_filename/index.html){ rewrite (.) $1/index.html break; } if (-f $request_filename/index1.php){ rewrite (.) $1/index1.php; } if (!-f $request_filename){ rewrite (.) /index1.php; }
求教解决方法。
1
ryd994 2017-07-30 21:50:51 +08:00 via Android
if is evil
用 try_files rtfm |
2
echotpq OP @ryd994 能帮忙完成的修改一下吗?谢谢啦
if (-f $request_filename/index.php) { rewrite (.) $1/index.php break; if (-f $request_filename/index.html) { rewrite (.) $1/index.html break; } if (-f $request_filename/index1.php) { rewrite (.) $1/index1.php; } if (!-f $request_filename) { rewrite (.) /index1.php; } |
3
sansara14 2017-07-31 16:06:43 +08:00
你这个配置我简单理解下:匹配不到上面的三个路径将直接重定向到 index1.php
--- 当有若干请求匹配不到上述三个路径后 CDN 将帮你缓存 index1.php ,这样后面用户再用同样的 URL 去访问时肯定会读到 CDN 的缓存 index1.php CDN 的缓存策略是根据你的源站配置来匹配的,你需要检查一下你的源站是否给了 CDN 你想要的内容去缓存,这不是 CDN 的 BUG.. --- 你可以参考下官方 try_files 的配置文档来修改: http://nginx.org/en/docs/http/ngx_http_core_module.html#try_files --- 或者类似的测试文章,你可以在配完后自己先验证一下 http://homeway.me/2015/05/22/nginx-rewrite-conf/ 希望可以帮上忙。 |
4
echotpq OP @sansara14 谢谢您的回复。
理论上,用户访问 http://首页.com 时,应该是请求 /index.php 我的 nginx rewrite 里面已经设置了 if (-f $request_filename/index.php) { rewrite (.) $1/index.php break; } 理论上,CDN 不应该把 /index1.php 的缓存输出给用户 暂时不知道哪里出了问题 |