2011-01-25 26 views
0

我有一个.htaccess文件 - 看起来是这样的:拒绝剧本,但在本地使用

RewriteEngine On 

<FilesMatch ^.*\.php.*$> 
Order allow,deny 
Deny from all 
Satisfy All 
</FilesMatch> 

RewriteRule ^help$ scripts/help.php [L] 
#more rewrites here... 

我想什么,能够做的就是让一个URL,如http://example.com/help被改写(按照那里的规则)并由脚本目录中的help.php脚本处理,但同时,通过使用http://example.com/scripts/help.php来拒绝人们直接运行脚本。问题是,当我使用这些语句时,这两个URL都会返回一个403 Forbidden。我甚至不知道我想要做什么是可能的...

不幸的是,我不能将文件放在根网站目录之外/之上(这就是为什么我要这样做),也不能我有权访问httpd.conf文件。

回答

1

如果请求/help,它将在内部重写为/scripts/help.php,然后满足<FilesMatch>的模式。这就是为什么访问/help也被禁止。

但是你可以使用mod_rewrite只禁止访问/scripts/help.php如果它是通过检查直接要求request line

RewriteCond %{THE_REQUEST} ^[A-Z]+\ /[^?\ ]*\.php[/? \] 
RewriteRule .*\.php.*$ - [F] 

这里^[A-Z]+\ /[^?\ ]*\.php[/? \]检查是否有请求的URI路径.php(它可能只除了?和一个空格之外的任何字符)之后是/(路径段分隔符),?(用于URI查询的指示符)或空格(URI的结尾)。