如果我在任何serch引擎中验证html或注册web,我会收到302错误。
原因是header()函数。如果我拿走它,一切都很好,200 OK状态。
所以主要的问题是我需要这个web重定向是多语言的。
逻辑是下一个。当用户第一次进入网页时,index.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中,还是重建整个站点/逻辑,以便在索引页面没有重定向?
答案 0 :(得分:2)
302
不是错误。它是“Found”的状态代码(又名“你要求的文件就在这里”)。如果添加Location
标题,PHP会自动为您插入此内容(除非手动插入状态,但此处不需要301)
如果您要告诉别人根据语言偏好获取不同的文档,这是预期的响应。
虽然从index.php
重定向到index.php
但很奇怪。大概你应该直接返回相应的文档,而不是重定向。
答案 1 :(得分:0)
我明白了。实际上非常简单。
验证程序不接受cookie。所以他们陷入了无限循环。
您可以测试一下:
答案 2 :(得分:0)
每当你使用标题(“位置:......你将获得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();