0

我遇到了 .htaccess 文件重写规则的问题。我想在我的根目录中有一个 .htaccess 文件,并在那里制定规则以阻止人们直接通过浏览器访问文件。所以,例如我有文件夹 blah/includes/file.php 和 .htaccess 文件在 blah/ 文件夹中,我想防止人们能够只输入浏览器 blah/includes/file.php 并获取该文件,但是我也希望我在应用程序中的功能能够使用这些文件。我知道他们几乎不可能知道我的包含文件的确切名称,但我想确定一下。提前致谢。

这是我没有响应的代码:

<IfModule mod_rewrite.c>
    ## Enable Mod Rewrite, this is only required once in each .htaccess file
    RewriteEngine On
    RewriteBase /
    ## Test for access to includes directory
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /includes/ .*$ [NC]
    ## Test that file requested has php extension
    RewriteCond %{REQUEST_FILENAME} ^.+\.php$
    ## Forbid Access
    RewriteRule .* - [F,NS,L] 
</IfModule>

注意:如果这可能很重要,我正在 localhost 中进行测试。

4

2 回答 2

1

问题是在第一个 RewriteCond 中 /includes/ 后面有一个空格,这会引发错误。

但是:我不会使用%{THE_REQUEST},因为它包含 HTTP 请求(请参阅http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritecond)。改为使用%{REQUEST_URI}

所以,如果你想禁止访问/<folder>/include/*.php,你可以使用这个代码:

 <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_URI} ^/[^/]+/includes/.*\.php$ [NC]
    RewriteRule .* - [F,NS,L]
 </IfModule>

假设您的 .htaccess 位于 blah/ 文件夹中。

于 2013-01-31T12:44:21.407 回答
0

最快的方法就是在您的包含目录中放置一个单行.htaccess文件:

deny from all

另一种选择是将包含文件夹放在 Web 可访问目录之外。

/home/
    /username/
        /includes/
        /public_html/
            /index.php

如果您想使用 a RewriteRule,那么这就是您要使用的:

RewriteRule ^includes/ - [F,L,NC]

这将返回401 Forbidden尝试访问以 . 开头的 URI 的响应includes

于 2013-01-31T12:43:39.250 回答