我有一个由php页面组成的站点,但它们是基于我认为他们需要的包含提供给用户的。如果他们能猜出php文件的名称,他们就可以访问这些页面。虽然这根本不是安全风险,但我宁愿找到一种方法来捕捉它并将它们重定向到其他地方。
我真的希望所有内容都通过索引页面,除非它是一个存在的文件(exeption适用于任何以.php结尾的文件)。
我试过这个,没有用:
RewriteEngine on
RewriteCond %{REQUEST_URI} !(.*\.php$) [NC]
RewriteCond %{REQUEST_FILENAME} !-f [NC]
RewriteRule .* /n/index.php [NC]
答案 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路径之外是更好的答案 - 它不需要特殊规则(以后可能会破坏并需要更改)也不需要扩展。