PHP跨域需手动配置:可在PHP脚本用header()设置响应头(须在输出前),或通过.htaccess用Header always set统一控制;必须处理OPTIONS预检请求,且启用凭证时Access-Control-Allow-Origin不可为*。

phpEnv 是 Windows 下的 PHP 集成环境(类似 XAMPP、WAMP),默认使用 Apache + PHP,不带 Nginx。它本身不提供图形化 CORS 开关,启用跨域必须手动配置响应头——要么写在 PHP 脚本里,要么通过 .htaccess 文件统一控制。
PHP 脚本内用 header() 设置最直接
适用于单个接口或调试阶段,无需重启服务,改完即生效。但要注意:必须放在任何输出之前(包括空格、BOM、echo),否则会报“headers already sent”错误。
-
header("Access-Control-Allow-Origin: *");快速验证可用,但上线前务必换成具体域名,比如https://localhost:3000 - 如果前端要带 Cookie 或 Authorization 头,必须同时加:
header("Access-Control-Allow-Credentials: true");,且此时Access-Control-Allow-Origin不能是*,必须明确指定来源 - 必须处理 OPTIONS 预检请求,否则 PUT/DELETE 或带自定义头的请求会失败:
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { exit(); } - 建议补上
Vary: Origin,避免 CDN 或代理缓存错乱:header("Vary: Origin");
Apache 的 .htaccess 配置更省事
适合整个 API 目录统一启用 CORS,不用动每个 PHP 文件。前提是 phpEnv 的 Apache 已启用 mod_headers 模块(默认开启)。
- 在站点根目录或
/api/子目录下新建或编辑.htaccess - 写入以下内容(注意:不能用
Header set,得用Header always set,否则对 204/304 响应无效):Header always set Access-Control-Allow-Origin "https://localhost:3000" Header always set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" Header always set Access-Control-Allow-Headers "Content-Type, Authorization, X-Requested-With" Header always set Access-Control-Allow-Credentials "true"
- 单独拦截 OPTIONS 请求并返回 204:
RewriteEngine On RewriteCond %{REQUEST_METHOD} OPTIONS RewriteRule ^(.*)$ - [R=204,L] - 保存后无需重启 Apache,但需确保
AllowOverride All在对应<directory></directory>块中已启用(phpEnv 默认满足)
为什么不能只靠 phpEnv 控制面板点一下就开 CORS
phpEnv 的控制面板只管服务启停、PHP 版本切换、MySQL 管理,它不解析或注入 HTTP 响应头逻辑。CORS 是 HTTP 协议层行为,由 Apache/PHP 共同决定,不是 phpEnv 自身功能。
- 你看到的“站点配置”选项卡,实际修改的是 Apache 的
vhost文件,但它不自动帮你加add_header(那是 Nginx 语法),Apache 里得靠Header指令 +mod_headers - 如果误在 vhost 里写
add_header Access-Control-Allow-Origin "*",Apache 会直接启动失败,报未知指令错误 - 某些 phpEnv 旧版本打包的 Apache 缺少
mod_headers,可运行httpd -M | findstr headers验证是否加载;没输出就去httpd.conf取消#LoadModule headers_module modules/mod_headers.so前的注释
CORS 最容易被忽略的点是:预检请求(OPTIONS)没被正确响应,或者 Access-Control-Allow-Origin 和 Access-Control-Allow-Credentials: true 同时出现却用了 *——这会导致浏览器静默拒绝,连 Network 面板都看不到失败原因,只显示“CORS error”。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











