如何使用CodeIgniter阻止某些URL?

时间:2012-12-21 09:12:32

标签: php .htaccess codeigniter

目前一切都工作正常,除非用户可以手动输入URL,这会弄乱如何为我的网站设置CI。例如:

www.somesite.com/folder/

控制器中的此文件夹不应该是可访问的...并且需要重定向到该文件夹​​索引页面,这将给出404错误。我试过在htaccess文件中为所有人添加deny,但它似乎没有做任何事情。

www.somesite.com/folder/index.html

我实际上希望所有文件夹都能正常运行。我在文件夹中有一个index.html文件,但它没有被读取。有没有办法在CI中解决这个问题?我也遇到了用户能够手动访问控制器功能的问题。我试图将它们改为私有,正如人们所建议的那样,但是我的脚本无法访问它们。例如:

www.somesite.com/controller_file/some_function

如何阻止他们访问此功能?

2 个答案:

答案 0 :(得分:1)

至于拒绝访问文件系统,最好的办法是将ApplicationSystem文件夹放在webroot之外。然后编辑index.php以设置每个文件夹的新路径。我的一般设置如下:

+ Root
| - Application
| - System
| + Webroot
| | - js
| | - css
| | - index.php
| | - ...
+ - ...


至于你的第二个问题,为了防止直接从网址访问某些功能,你需要在下划线中添加它们。

所以而不是

public function some_function() {...}

使用 public function _some_function() {...}

然后可以使用$this->_some_function();

在控制器中调用它

如果您有任何AJAX功能,则需要从名称中删除下划线以使其可访问。您可以通过使用以下条件包装函数来阻止用户直接从URL访问它们。

if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest')) {}

以上检查请求是否通过AJAX。

答案 1 :(得分:1)

您可以创建白名单溶剂:

  1. 打开您的应用程序/ config / routes.php
  2. 添加您要允许的路线。
  3. 添加一个catchall路由.*并将其重定向到errot处理程序
  4. Codeigniters尝试按照它们在数组中列出的顺序匹配路由模式 每当用户输入你没有明确允许的路线时,allqays会将他重定向到catchall路线

    user-guide on routing

    编辑: 您可以通过仅重定向匹配特定模式的请求来创建黑名单逻辑,并保留所有其他模式的默认行为。