如果我在任何服务器引擎中验证 html 或注册 web,我会得到 302 错误。
原因是 header() 函数。如果我把它拿走,200 OK 状态一切都很好。
所以主要问题是我需要这种重定向才能使网络是多语言的。
接下来是逻辑。当用户第一次进入网页索引时.php - require_once一个带有函数的文件:
function cookies() {
if (!isset($_COOKIE["lang"])){
setcookie('lang','ukr', time()+(60*60*24*31));
header('Location: index.php');
}}
cookies();
因此,用户会看到一个已经使用Deafault语言提交的页面。
如果没有来自require_once文件的重定向,则不会下载来自mysql的数据,并且用户不会看到任何文本。
问题:我应该将其保留为 HTTP 302 还是重建整个站点/逻辑以在索引页面上没有任何重定向???
302
不是错误。它是"已找到"的状态代码(又名"您要求的文档在此处")。如果您添加Location
标头,PHP 将自动为您插入此标头(除非手动插入状态,但您不希望在此处使用 301)
如果您告诉人们根据他们的语言偏好去获取不同的文档,这是预期的响应。
不过,从index.php
重定向到index.php
很奇怪。大概您应该直接返回相应的文档,而不是重定向。
我明白了。 这其实很简单。
验证器不接受饼干。所以他们陷入了一个无限循环。
您可以对此进行测试:
- 从您的计算机中删除所有 Cookie。
- 在您的浏览器中禁用 Cookie 并尝试加载您的网站。
每当您使用标头("位置:....你会得到一个302,这是一个状态而不是一个错误,它告诉浏览器该网站已经重定向了页面:
http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
阅读这些验证器和引擎,看看拥有302对于您要做的任何事情来说是否是一个问题,通常不应该。
一种肮脏的方法是强制标头,我个人不鼓励这样做,也不知道它真的会产生什么副作用,但这可能是欺骗这些引擎的快速解决方法:
function cookies() {
if (!isset($_COOKIE["lang"])){
setcookie('lang','ukr', time()+(60*60*24*31));
header('Location: index.php');
header('HTTP/1.1 200 OK'); // <--- Forcing the header status
}}
cookies();