我试图阻止直接访问子目录和子目录中的php文件。我已将下面的代码添加到子目录中的.htaccess文件中,但是现在AJAX请求不起作用。
如何停止访问www.example.com/subdir,但允许jQuery加载& ajax的功能是什么?
Options -Indexes
order allow,deny
deny from all
谢谢
答案 0 :(得分:2)
我会把apache指令放在一边,并且 - 也许 - 专注于基于php的解决方案:
确保包含jquery ajax调用的文件扩展名为“.php”。
(当然在该文件中,所有jquery必须包含在<script>
和</script>
标记内。
在ajax调用之前的jquery函数内,输入:
<?php $_SESSION["allow"] = "granted" ?>
(即使php标签包含在“script”标签中,它们也会运行)
打开你的ajax(php)文件,并在最顶层输入:
<?php session_start(); if((!isset($_SESSION['allow'])) && ($_SESSION['allow']!="granted")){die();}else unset($_SESSION['allow']); (...rest of your php code here...) ?>
......你完成了!
P.S。当然,你可以(或者更好:应该)重命名会话并给它们不同或更复杂的值,但我只是想指出基本的想法......快乐的编码!
答案 1 :(得分:0)
如果你的ajax功能访问该文件夹中的某个文件,你不能。由于AJAX是从客户端浏览器发送的请购单。
答案 2 :(得分:0)
将此代码放入DOCUMENT_ROOT/.htaccess
文件中:
RewriteEngine On
## disable direct access (but allow internal or AJAX requests)
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?domain\.com/ [NC]
RewriteRule ^subdir(/|$) - [F,NC]
将www.domain.com
替换为您自己的域名。
请注意,这会使用%{HTTP_REFERER}
标头来执行此阻止,并且可以操作此标头值。
答案 3 :(得分:0)
您可以使用mod_rewrite限制对目录中某些文件的所有投注进行访问。将其添加到该目录中的.htaccess
。
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !(jsonp)|(ws)|(ajax)
RewriteRule .* - [R=404,L]
只需将 jsonp ws ajax 替换为您的文件名称。
答案 4 :(得分:0)
我找到了使用session的最简单的解决方案。
假设您要限制db_config.php的直接访问,
你可以这样做。 从root打开index.php并在代码的第一行添加:$sess = session_start();
$_SESSION["nuclear_weapon_key"] = "lolva";
现在转到sub_dir - &gt;打开db_config.php 将此页面添加到页面顶部:
$sess = session_start();
if(isset($_SESSION['nuclear_weapon_key']) && $_SESSION['nuclear_weapon_key'] === "lolva"){ } else{ echo "LOL"; die();}
对包含文件的任何ajax / jquery重复此操作。
它对我有用。