![](/img/trans.png)
[英]How can I parse $_SERVER['HTTP_COOKIE'] in pure PHP?
[英]if Nginx does not find a http_cookie then try serving a static file, otherwise fallback to php
我对nginx相对较新,并且正在努力了解其中的一些概念。
我有一个php应用程序,我也有一些静态html文件,我希望使用这些文件供未登录的用户使用。我可以通过http cooke的存在来确定它(如果登录或将'loggedin'设置为1,如果没有,则不会显示或设置为0)。
静态文件可能对注销的用户可用或不可用,如果没有,那么我希望php处理请求
我最大的尝试来解决这个问题是这样的
location / {
if ($http_cookie ~* "loggedin" ) {
set $cachepath '/cache$request_uri.html';
}
try_files $cachepath $uri /index.php?$query_string;
}
但这不起作用。 同样值得注意的是,我的php应用程序提供的网址也是如此,例如www.website.com/about-us/(末尾带有斜杠)。 因此,如上查找缓存文件时,该缓存文件应为cache / about-us.html。 另外,我有一个名为index.html的静态主页,但我不确定该如何服务。
感谢任何可以帮助我的人。
您需要从URI尾随/
提取基本名称,然后测试文件是否存在。 一种方法是使用带有命名捕获的正则表达式location
。 有关更多信息,请参见此文档 。
例如:
location ~ ^/(?<name>[^/]+)/ {
if ($http_cookie ~* "loggedin") {
rewrite ^ /index.php last;
}
if (-f $document_root/cache/$name.html) {
rewrite ^ /cache/$name.html last;
}
rewrite ^ /index.php last;
}
location / { ... }
location ~ \.php$ { ... }
第一个location
块仅处理由名称和结尾/
组成的URI。 如果cookie存在,第一个if
块将重定向到PHP(我认为您问题中的逻辑已倒置)。 第二个if
块测试是否存在匹配的缓存文件。
请参阅有关使用if
注意事项 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.