2012-05-22 47 views
0

我有一个.htaccess文件:重定向AJAX查询通过的.htaccess

RewriteEngine On 
DirectoryIndex control.php 
Options +FollowSymlinks 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule (.+) controller.php?do=$1 [L] 

这会将所有的查询,并建立干净的URL。但是当我使用ajax时,它也会重定向。是否有可能过滤阿贾克斯查询和重定向到

controller-ajax.php?do=$1 [L] 

而不是?

我试图抓住它在controller.php中,但X_REQUESTED_WITH不存在。最好的事情是将所有ajax请求重定向到另一个脚本,而不是进行额外的脚本检查。

+0

有没有一种方法可以使AJAX查询不同于其他类型的查询?也许添加一个GET变量,如'?ajax = true'? – Ansari

+0

感谢您的回答。但它也可以通过添加此变量来简单的http查询来调用脚本,并且您将被传递,并且js函数并不难找到用于获取此变量 – Jacob88

+0

任何想法请尝试修复它大约几个星期.. – Jacob88

回答

1

当您调用AJAX时,向查询添加一个GET变量(即将?ajax=true添加到查询的末尾)。然后在你的.htaccess中有:

RewriteEngine On 
DirectoryIndex control.php 
Options +FollowSymlinks 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} -f {OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule .* - [L] 

RewriteCond %{QUERY_STRING} ajax.true 
RewriteRule (.+) controller-ajax.php?do=$1 [L] 

RewriteRule (.+) controller.php?do=$1 [L] 
+0

但它是否有任何防御?我也可以通过网络活动看看我在哪里查询了哪些内容,并且只需添加到简单链接?ajax = true和ill获取脚本,我想保护它,也许通过标题可以避免它? – Jacob88

+0

也这个.htaccess不适用于我(iv固定第二行 – Jacob88

+0

你可以尝试检查这个变量吗?'$ _SERVER ['HTTP_X_REQUESTED_WITH']'(应该是'XMLHttpRequest') - 一些服务器发送它,一些不。我还没意识到你正在试图保护脚本文件,但我会说,你无法100%保护它 - 鉴于AJAX是一个客户端请求,足够聪明的人总是可以模仿这样的请求。 – Ansari