本文目录导读:

在 PHP 中设置 Referrer-Policy 主要有以下几种方法:
使用 header() 函数(最常用)
全局设置
<?php
// 在页面顶部设置
header('Referrer-Policy: strict-origin-when-cross-origin');
?>
常见策略值
// 不发送 Referrer 信息
header('Referrer-Policy: no-referrer');
// 只发送来源网站的协议、主机和端口
header('Referrer-Policy: origin');
// 同源发送完整URL,跨域只发送来源
header('Referrer-Policy: strict-origin-when-cross-origin');
// 只发送同源的 Referrer
header('Referrer-Policy: same-origin');
// 强制发送完整 Referrer
header('Referrer-Policy: unsafe-url');
在 HTML 中设置(替代方案)
<?php // 如果无法修改 headers,可以在 HTML 中设置 echo '<meta name="referrer" content="strict-origin-when-cross-origin">'; ?>
通过配置 Apache/Nginx 设置
Apache (.htaccess)
<IfModule mod_headers.c>
Header set Referrer-Policy "strict-origin-when-cross-origin"
</IfModule>
Nginx
add_header Referrer-Policy "strict-origin-when-cross-origin";
完整示例:根据环境动态设置
<?php
// 允许所有来源的请求
header('Access-Control-Allow-Origin: *');
// 根据环境设置不同的 Referrer-Policy
$environment = getenv('APPLICATION_ENV'); // 获取环境变量
switch ($environment) {
case 'development':
header('Referrer-Policy: no-referrer-when-downgrade');
break;
case 'production':
header('Referrer-Policy: strict-origin-when-cross-origin');
break;
default:
header('Referrer-Policy: strict-origin-when-cross-origin');
}
// 其他必需的 headers
header('X-Content-Type-Options: nosniff');
header('X-Frame-Options: SAMEORIGIN');
?>
验证设置是否生效
<?php
header('Referrer-Policy: strict-origin-when-cross-origin');
// 检查 headers 是否已发送
if (headers_sent()) {
echo 'Headers 已经发送,无法更改';
} else {
// 可以安全设置 header
header('Referrer-Policy: strict-origin-when-cross-origin');
}
?>
注意事项
-
必须在使用任何输出前调用 header()
确保在 HTML、echo 等输出之前设置
-
PHP 5.5+ 支持这种设置方法
-
浏览器兼容性
主流浏览器都支持,但旧版本可能有差异
-
优先级
- HTTP Header >
<meta>标签 > 浏览器默认设置
- HTTP Header >
最推荐的做法是在 PHP 文件顶部使用 header() 函数设置,因为它能够全局控制,易于管理和维护。