You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为AJAX请求设置.htaccess重写规则例外的技术咨询

解决AJAX请求被mod_rewrite规则拦截的问题

嘿,我懂你的困扰——当前的mod_rewrite规则把所有非文件/目录/符号链接的请求都导向了index.php,确实会打断AJAX的正常调用。别担心,我们只需要给AJAX请求加个“通行证”,让它们绕过重写规则就行,下面给你几种实用的方案:

方案1:用特定路径前缀区分AJAX请求

如果你的AJAX请求都是指向/ajax/开头的路径(比如/ajax/get-user-data),可以直接在现有规则前加一条排除规则:

RewriteEngine On
Options -Indexes

# 放行所有以/ajax/开头的请求,不进行重写
RewriteRule ^ajax/ - [L]

# 原有的重写规则
RewriteCond %{REQUEST_FILENAME}!-d
RewriteCond %{REQUEST_FILENAME}!-f
RewriteCond %{REQUEST_FILENAME}!-l
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

[L]标志表示这是最后一条执行的规则,匹配到/ajax/开头的请求后,就不会再触发后面的重写逻辑,直接让服务器处理这些请求。

方案2:放行特定的AJAX处理文件

如果你的AJAX请求都是调用某个具体的处理文件(比如ajax-handler.php),可以直接排除这个文件:

RewriteEngine On
Options -Indexes

# 直接放行ajax-handler.php,不执行重写
RewriteRule ^ajax-handler.php$ - [L]

RewriteCond %{REQUEST_FILENAME}!-d
RewriteCond %{REQUEST_FILENAME}!-f
RewriteCond %{REQUEST_FILENAME}!-l
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

方案3:通过AJAX请求头识别并放行

很多前端框架(比如jQuery)发送AJAX请求时,会自动带上X-Requested-With: XMLHttpRequest的请求头。我们可以利用这个特征来识别AJAX请求,让它们绕过重写:

RewriteEngine On
Options -Indexes

# 检查请求头,判断是AJAX请求就放行
RewriteCond %{HTTP_X_REQUESTED_WITH} XMLHttpRequest
RewriteRule ^ - [L]

RewriteCond %{REQUEST_FILENAME}!-d
RewriteCond %{REQUEST_FILENAME}!-f
RewriteCond %{REQUEST_FILENAME}!-l
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

如果是原生AJAX请求,记得手动添加这个请求头,比如:

const xhr = new XMLHttpRequest();
xhr.open('GET', '/your-ajax-endpoint', true);
xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
xhr.send();

方案4:放行特定后缀的请求

如果你的AJAX接口是返回特定格式的文件(比如.json、.api),可以排除这些后缀的请求:

RewriteEngine On
Options -Indexes

# 放行所有.json和.api后缀的请求
RewriteRule \.(json|api)$ - [L]

RewriteCond %{REQUEST_FILENAME}!-d
RewriteCond %{REQUEST_FILENAME}!-f
RewriteCond %{REQUEST_FILENAME}!-l
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

小提示

优先选择方案1或方案2,因为依赖请求路径/文件的方式比依赖请求头更稳定——毕竟有些前端场景可能不会自动添加AJAX请求头,或者请求头可能被代理服务器修改。

内容的提问来源于stack exchange,提问作者Cerbion

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:47:57