停止直接访问 (.htaccess) 并允许 ajax 请求到子文件夹
Posted
技术标签:
【中文标题】停止直接访问 (.htaccess) 并允许 ajax 请求到子文件夹【英文标题】:stop direct access (.htaccess) and allow ajax request to subfolder 【发布时间】:2014-01-31 17:14:02 【问题描述】:我试图停止直接访问子目录和子目录中的 php 文件。我已将以下代码添加到子目录中的 .htaccess 文件中,但是现在 AJAX 请求不起作用。
如何停止访问 www.example.com/subdir,但允许 jQuery 加载和 ajax 函数工作?
Options -Indexes
order allow,deny
deny from all
谢谢
【问题讨论】:
【参考方案1】:我会将 apache 指令放在一边,并且 - 或许 - 专注于基于 php 的解决方案:
确保包含 jquery ajax 调用的文件具有“.php”扩展名。
(当然在该文件中,所有 jquery 都必须包含在 <script>
和 </script>
标记内。
在 ajax 调用之前的 jquery 函数中,键入:
<?php $_SESSION["allow"] = "granted" ?>
(即使它们包含在“脚本”标签中,php标签也会运行)
打开您的 ajax (php) 文件并在最顶部键入:
<?php session_start(); if((!isset($_SESSION['allow'])) && ($_SESSION['allow']!="granted"))die();else unset($_SESSION['allow']); (...rest of your php code here...) ?>
...你就完成了!
附:当然,您可以(或更好:应该)重命名会话并赋予它们不同或更复杂的值,但我只是想指出基本思想......快乐编码!
【讨论】:
【参考方案2】:如果您的 ajax 函数访问该文件夹中的某个文件,您不能。由于 AJAX 是从客户端浏览器发送的请求。
【讨论】:
【参考方案3】:将此代码放入您的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
标头来执行此阻塞,并且可以操纵此标头值。
【讨论】:
当您说“操纵此标头值”时,请您详细说明一下吗? 这意味着客户可以在%HTTP_REFERER heade
中放入自定义值【参考方案4】:
我找到了使用会话的最简单的解决方案。
project_folder index.php 子目录 db_config.php假设您想限制对 db_config.php 的直接访问,
你可以这样做。 从根目录打开 index.php 并将其添加到代码的第一行:
$sess = session_start();
$_SESSION["nuclear_weapon_key"] = "lolva";
现在转到 sub_dir -> 打开 db_config.php 将此添加到页面顶部:
$sess = session_start();
if(isset($_SESSION['nuclear_weapon_key']) && $_SESSION['nuclear_weapon_key'] === "lolva") else echo "LOL"; die();
对包含文件/s 的任何 ajax/jquery 重复此操作。
它对我有用。
【讨论】:
【参考方案5】:您可以使用 mod_rewrite 来限制对目录中所有下注特定文件的访问。将此添加到该目录中的.htaccess
。
RewriteEngine On
RewriteCond %REQUEST_FILENAME !(jsonp)|(ws)|(ajax)
RewriteRule .* - [R=404,L]
只需将 jsonp ws ajax 替换为您的文件名即可。
【讨论】:
这是阻止我所有的网页加载以上是关于停止直接访问 (.htaccess) 并允许 ajax 请求到子文件夹的主要内容,如果未能解决你的问题,请参考以下文章
.htaccess 拒绝访问图像文件夹,但允许访问查看单个图像