停止直接访问(.htaccess)并允许ajax请求到子文件夹

时间:2014-01-13 02:57:04

标签: php jquery ajax .htaccess redirect

我试图阻止直接访问子目录和子目录中的php文件。我已将下面的代码添加到子目录中的.htaccess文件中,但是现在AJAX请求不起作用。

如何停止访问www.example.com/subdir,但允许jQuery加载& ajax的功能是什么?

Options -Indexes
order   allow,deny
deny    from all

谢谢

5 个答案:

答案 0 :(得分:2)

我会把apache指令放在一边,并且 - 也许 - 专注于基于php的解决方案:

  1. 确保包含jquery ajax调用的文件扩展名为“.php”。 (当然在该文件中,所有jquery必须包含在<script></script>标记内。

  2. 在ajax调用之前的jquery函数内,输入:

    <?php $_SESSION["allow"] = "granted" ?>

    (即使php标签包含在“script”标签中,它们也会运行)

  3. 打开你的ajax(php)文件,并在最顶层输入:

  4. <?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的最简单的解决方案。

  • project_folder
    • 的index.php
    • sub_dir
      • db_config.php

假设您要限制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重复此操作。

它对我有用。