使用header()后在PHP中设置http_response_code()会阻止页面加载

Ros*_*nda -2 php header http-response-codes

我正在使用php脚本将用户从mysite.com/id=123发送到mysite.com/my-id-title

我可以使用.htaccess文件重写URL(这当然是自然的解决方法,但是鉴于url的替换信息不在url提供的原始参数中,而是需要数据库查询(如您所见)在示例中)我不能仅仅使用mod_rewrite来做到这一点,而且使事情变得更加困难的是,我没有访问Apache的权限,我只能使用.htaccess。

因此,我认为,作为一种变通办法,是通过php生成一条规则,该规则确实可以使用header('Location:'。$ reenvioA);来工作。

问题是PHP生成的响应代码是302,而不是200。响应响应是200,这是我需要创建站点地图并出于SEO的原因。

在此处输入图片说明

因此,为了防止这种情况,我考虑过告诉php我想要200个代码,因此我强制执行。

我尝试了很多方法:

header("HTTP/1.1 200 OK");
header('Location:'.$reenvioA);
Run Code Online (Sandbox Code Playgroud)

也许在Location标头之前和之后强制使用它?

header("HTTP/1.1 200 OK");
header('Location:'.$reenvioA);
header("HTTP/1.1 200 OK");
Run Code Online (Sandbox Code Playgroud)

然后,我尝试使用其可选参数进行操作:

header('Location:'.$reenvioA, false, 200);
Run Code Online (Sandbox Code Playgroud)

也许只是让第二个论点保持正确?

header('Location:'.$reenvioA, true, 200);
Run Code Online (Sandbox Code Playgroud)

然后只需使用响应本身设置变量:

header('Location:'.$reenvioA);
http_response_code(200);
Run Code Online (Sandbox Code Playgroud)

到目前为止,都没有任何效果,因为一旦我强制响应,该页面就不会加载。似乎即使在header(Location:url)之后设置了响应代码,php也不会获取该页面。 在此处输入图片说明

我能做什么?

Mos*_*rtz 5

您无法执行此操作,因为您正在重定向,因此只能使用3xx响应代码,任何不在3xx范围内的响应代码将不起作用。

(如果可以选择,则可以使用JS重定向并获得200,而无需更改任何标头)