PHP 标头函数会覆盖 htaccess 标头吗?

use*_*134 5 php

在 PHP 中设置标头

header("Access-Control-Allow-Origin: https://www.example.com");
header("Access-Control-Allow-Headers: Content-Type, Content-Range, Content-Disposition, Content-Description");
    
Run Code Online (Sandbox Code Playgroud)

标头设置于.htaccess

SetEnvIf Origin ^(https?://.+\.(example|gstatic)\.com(?::\d{1,5})?)$   CORS_ALLOW_ORIGIN=$1
Header append Access-Control-Allow-Origin  %{CORS_ALLOW_ORIGIN}e   env=CORS_ALLOW_ORIGIN

Header set Access-Control-Allow-Headers "origin, x-requested-with, content-type"
Header set Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"

Header merge  Vary "Origin"
Run Code Online (Sandbox Code Playgroud)

我宁愿不编辑该.htaccess文件。PHPheader()函数会覆盖吗?

Ale*_*lke 4

如果不编辑你的.htaccess,这将会很困难,但是如果你允许自己进行一些小的编辑,你就可以让它工作。

\n

Apache2 标头文档说:

\n
\n

该指令可以替换、合并或删除 HTTP 响应标头。在内容处理程序和输出过滤器运行后立即修改标头,从而允许修改传出标头。

\n
\n

所以它发生在 PHP(又名内容处理程序)之后。

\n

但是,如果我们看一下该选项的语法:

\n
Header [condition] add|append|echo|edit|edit*|merge|set|setifempty|unset|note header [[expr=]value [replacement] [early|env=[!]varname|expr=expression]]\n
Run Code Online (Sandbox Code Playgroud)\n

我们看到其中一项行动是setifempty。这就是您真正想要使用的。覆盖set该值。setifempty如果尚未设置,则设置该值。

\n
Header setifempty Access-Control-Allow-Headers "origin, x-requested-with, content-type"\nHeader setifempty Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"\n
Run Code Online (Sandbox Code Playgroud)\n

这是该选项的说明:

\n
\n

setifempty
\n\xc2\xa0 \xc2\xa0 设置请求标头,但前提是不存在具有此名称的先前标头。

\n
\n

笔记:

\n

有一个关于使用header_remove()PHP 指令的评论。只有在 PHP 运行时(即Header应用 Apache2 之前)才会发生这种情况。所以这是行不通的。

\n