XAMPP 环境下运行 React + PHP 前后端分离项目的跨域配置

轻涛君_5735

轻涛君_5735

2026-05-05

274人浏览

原创

XAMPP下React+PHP项目无需跨域,根本原因是路径与响应头配置错误而非真正跨域;必须启用mod_headers模块、在Directory块中配置CORS头、PHP文件开头正确发送header并处理OPTIONS预检请求。

xampp 环境下运行 react + php 前后端分离项目的跨域配置

直接说结论:XAMPP 下 React + PHP 项目根本不需要“跨域”,只要路径和响应头配置对了,就不存在浏览器报 No 'Access-Control-Allow-Origin' header 的问题——你看到的所谓“跨域错误”,90% 是因为 Apache 没启用 mod_headers,或 PHP 响应头没在输出前发送,或前端请求发到了错误路径。

Apache 必须启用 mod_headers 模块

这是所有 CORS 配置生效的前提。XAMPP 默认注释掉了这一行:

LoadModule headers_module modules/mod_headers.so

不取消注释并彻底重启 Apache(不是“Restart”,是先 Stop 再 Start),Header set 指令在 httpd-vhosts.conf 或 httpd.conf 里写一百遍也无效,且不会报错,只会静默失效。

验证方式:访问 http://localhost/xampp/phpinfo.php,搜索 headers,看到 mod_headers 出现在 loaded modules 列表中才算成功。

常见错误:

  • 只改了 .htaccess —— XAMPP 默认禁用 AllowOverride All,且 Header 不在允许覆盖的指令集内,放进去直接 500 错误
  • 在虚拟主机外全局写 Header set —— Apache 可能忽略,必须包在 <directory></directory> 或 <virtualhost></virtualhost> 块里
  • 路径写错,比如用了单反斜杠 X: mpphtdocspi —— Windows 下必须用正斜杠 X:/xampp/htdocs/api 或双反斜杠 X:\xampp\htdocs\api

PHP 接口必须返回正确 CORS 响应头

不能只靠前端代理或改端口糊弄过去。浏览器看到的是最终响应头,而它只来自 PHP 脚本或 Apache 配置。

最简可靠的写法(放在 PHP 文件最开头,任何 echo 或 print 之前):

react-pro
react-pro

你是一位 React 专家,擅长高级 Hook、性能优化、状态管理和现代 React 模式。适用场景:高级 Hook 模式...

下载
<?php header("Access-Control-Allow-Origin: http://localhost");
header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
header("Access-Control-Allow-Headers: Content-Type, X-Requested-With, Authorization");
header("Access-Control-Allow-Credentials: true");

if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
    http_response_code(200);
    exit();
}
// 后续业务逻辑...
?>

注意点:

  • Access-Control-Allow-Origin 不能是 * + Access-Control-Allow-Credentials: true 共存,否则浏览器直接拒绝
  • 如果前端带 credentials: true(比如 Axios 里写了 withCredentials: true),就必须指定具体源,如 http://localhost
  • 预检请求(OPTIONS)必须被明确处理,否则后续请求卡在 403/405
  • PHP 输出前不能有任何空格、BOM 或 echo,否则 header() 报 Cannot modify header information

React 构建后不能直接调用 /api/login.php

开发时 npm start 能通,是因为 Webpack Dev Server 做了代理;build 后扔进 XAMPP,浏览器会按实际 URL 发请求。如果你把 React 放在 htdocs/react/,又在代码里写 axios.post("/api/login.php"),实际发出的是 http://localhost/react/api/login.php —— 这个路径下根本没有可执行的 PHP 文件,Apache 也不会去解析它。

正确做法:

  • PHP 文件必须放在 Apache 可执行路径下,比如 htdocs/api/login.php
  • React 中的请求 URL 改为绝对路径:axios.post("http://localhost/api/login.php")
  • 确保 htdocs/api/ 目录在 <directory></directory> 块中已配置好 CORS 头(见第一个副标题)
  • 别把 PHP 文件放进 src/ 或 build/api/ —— 构建过程不会复制它们,更不会让 Apache 执行

别用 .htaccess 配 CORS,也别信“改端口就能跨域”

.htaccess 在 XAMPP 下默认不可用,且 Header 指令不在 AllowOverride 白名单里,强行写进去只会触发 500 错误。而只改 Apache 端口(比如配成 8080)只是让前后端变成不同源,反而激活了 CORS 检查——但没响应头,照样被拦。

真正要做的只有三件事:

  • 启用 mod_headers 并确认加载成功
  • 在 <directory></directory> 块里写死 Header set Access-Control-Allow-Origin "http://localhost"
  • PHP 文件开头加 header() 并处理 OPTIONS

复杂点在于路径隔离和响应头顺序——前者容易漏掉 basename 或 RewriteBase,后者容易在 PHP 里提前输出内容。这两处出错,连 phpinfo() 都救不回来。

php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

xampp php react

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2643

5

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

6730

13

后端的主要工作内容介绍
后端的主要工作内容介绍

后端是应用程序的服务端部分,负责核心任务,如数据库交互、业务逻辑处理和响应客户端请求。想了解更多后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

6186

10

php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2023.09.01

11464

6

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

6621

5

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

2175

5

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

2023.10.23

4208

4

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

2023.10.23

4914

6

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.03

3851

9

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程