在LAMP环境下处理跨域访问,其实是不少开发者都会遇到的场景。你配置好了后端接口,前端一调,浏览器直接给你来个跨域拦截——这时候就需要在服务端做点手脚来放行。下面整理了几种在Apache+PHP环境下常用的实践方案,供你参考。

方法一:通过mod_headers模块配置
这是最直接的做法——让Apache在响应里主动带上跨域相关的HTTP头。
首先确认
mod_headers模块是否已启用,没启用的话需要手动激活:sudo a2enmod headers然后编辑你的虚拟主机配置文件(路径通常类似
/etc/apache2/sites-a vailable/your-site.conf),在对应的VirtualHost块里添加如下内容:ServerName your-site.com # 允许跨域访问 Header set Access-Control-Allow-Origin "*" Header set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" Header set Access-Control-Allow-Headers "Content-Type, Authorization" # 处理预检请求 RewriteEngine On RewriteCond %{REQUEST_METHOD} OPTIONS RewriteRule ^(.*)$ $1 [R=200,L] DocumentRoot /var/www/your-site配置完后记得重启Apache,让改动生效:
sudo systemctl restart apache2
方法二:利用.htaccess文件
如果你没有虚拟主机配置的权限,或者只想针对某个站点做调整,.htaccess 是更灵活的选择。
在网站根目录下创建或编辑
.htaccess文件,写入以下规则:Header set Access-Control-Allow-Origin "*" Header set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" Header set Access-Control-Allow-Headers "Content-Type, Authorization" # 处理预检请求 RewriteEngine On RewriteCond %{REQUEST_METHOD} OPTIONS RewriteRule ^(.*)$ $1 [R=200,L]同时要确保Apache的主配置允许
.htaccess覆盖——检查/etc/apache2/apache2.conf或/etc/httpd/conf/httpd.conf中对应的AllowOverride选项是否为All:AllowOverride All同样重启Apache:
sudo systemctl restart apache2
方法三:直接在PHP脚本中设置响应头
如果连Apache都动不了,那就退而求其次——在PHP代码层面处理。每支需要跨域访问的脚本入口加上头信息即可:
这种方式对服务器配置无侵入,但缺点是每支PHP文件都得手动处理,维护起来稍微麻烦些。
值得注意的几个点
- 安全第一:生产环境中建议把
Access-Control-Allow-Origin的*替换成具体的域名,比如https://your-frontend.com,避免被任意站点调用。 - 预检请求:当请求携带了自定义头部、或者使用了
PUT、DELETE等方法时,浏览器会先发一个OPTIONS请求探路。服务器必须对这个预检请求返回200且带上对应的跨域头,才能真正放行后面的主请求。
三种方法各有适用场景,根据你的项目权限和习惯选一个就行。配置好了之后,跨域问题基本上就能解决了。