我想阻止人们使用.htaccess直接访问我的php页面

时间:2010-05-06 21:26:03

标签: php mod-rewrite redirect

我有一个由php页面组成的站点,但它们是基于我认为他们需要的包含提供给用户的。如果他们能猜出php文件的名称,他们就可以访问这些页面。虽然这根本不是安全风险,但我宁愿找到一种方法来捕捉它并将它们重定向到其他地方。

我真的希望所有内容都通过索引页面,除非它是一个存在的文件(exeption适用于任何以.php结尾的文件)。

我试过这个,没有用:

RewriteEngine on
RewriteCond %{REQUEST_URI} !(.*\.php$) [NC]
RewriteCond %{REQUEST_FILENAME} !-f [NC]
RewriteRule .* /n/index.php [NC]

4 个答案:

答案 0 :(得分:4)

也许您可以将php文件放在Web路径之外的目录中?

答案 1 :(得分:3)

处理此问题的一种方法是在页面中定义一个常量来执行包含:

define("access", "legitimate");

然后在每个包含文件的开头:

if(!defined('access')){
    header("Location:index.php");
    die(); // make sure to call die() or the rest of the page will be parsed
}

这是许多框架和CMS处理这个问题的方式(我的头脑,Joomla!和CodeIgniter) - 你不需要乱用.htaccess,它也可以在各种托管平台上运行。

答案 2 :(得分:1)

我认为这样的事情对你有用:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L]
RewriteRule \.php$ index.php [L]

答案 3 :(得分:0)

RewriteEngine on
RewriteCond %{REQUEST_URI} .*\.php$ [NC]
RewriteRule !^index\.php$ error.php

这对我有用,看起来它应该做你想要的。将您不希望直接访问的脚本放在Web路径之外是更好的答案 - 它不需要特殊规则(以后可能会破坏并需要更改)也不需要扩展。