1

我不是 .htaccess 专家,但是随着时间的推移,我已经从各种有效的帖子中构建了一个。

本节

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule ^(.*)$ index.php?path=$1 [QSA,L]

导致所有页面都通过 index.php。这很好用。但是,它迫使我的至少一个 ajax 页面通过 index.php,这是不可取的。有谁知道我如何将这个 .htaccess 代码限制为仅在初始站点访问期间生效而不是 ajax 加载?

谢谢。

4

1 回答 1

2

为什么不直接向常规文件(有大小)发出 AJAX 请求?这样,%{REQUEST_FILENAME} !-s条件将失败并且不会使用重写规则。

X-Requested-With否则,如果请求具有通用(但不是标准) HTTP 标头,您可以尝试跳过重写

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{HTTP:X-Requested-With} !=XMLHttpRequest
RewriteRule ^(.*)$ index.php?path=$1 [QSA,L]

下面我为你分解...

大多数 JS 库或浏览器(记不清了)在发送 AJAX 请求时,都会注入一个X-Requested-With带有 value的 HTTP 标头XMLHttpRequest。您可以使用 HTTP 标头来RewriteCond检测%{HTTP:X-Requested-With} =XMLHttpRequestAJAX 请求。使用!=意味着请求不是通过 AJAX。

于 2013-08-07T05:08:48.663 回答