【问题标题】:Block direct access to PHP files阻止直接访问 PHP 文件
【发布时间】:2012-01-11 17:05:12
【问题描述】:

我目前的 htaccess 文件包含执行此操作的 mod_rewrite 规则:

www.mysite.com/articles/jkr/harrypotter --> www.mysite.com/index.php?p=articles&author=jkr&book=harrypotter

www.mysite.com/articles/jkr --> www.mysite.com/index.php?p=articles&author=jkr

www.mysite.com/articles --> www.mysite.com/index.php?p=articles

在我的根目录中,我有一些 PHP 文件,例如:index.php、pre.php、view.php 等。

我想要的:阻止直接访问 php 文件。

例如:

www.mysite.com/index.php --> "404 - Page Not Found" or "File not exist"

www.mysite.com/view.php --> "404 - Page Not Found" or "File not exist"

我尝试了在搜索时找到的代码。它使用“f”标志。但我不明白。当我使用它时,它也不显示主页。所以,我删除了我正在测试的所有内容。我的 htaccess 文件现在只包含三个规则(接受页面、作者、书籍)。

请帮忙。

【问题讨论】:

标签: php mod-rewrite


【解决方案1】:

我在这里看到了之前提出的另一个问题:mod_rewrite error 404 if .php

我对其进行的更改是,添加了 [NC] 标志。否则,如果我们将大写字母放在扩展名中(比如“index.PHP”),它将加载。

所以, 解决方案:

RewriteCond %{THE_REQUEST} \.php[\ /?].*HTTP/ [NC]
RewriteRule ^.*$ - [R=404,L]

谢谢

【讨论】:

    【解决方案2】:

    创建一个简单的 404.php 抛出 404 错误,然后将 index.php 重写为 404.php 等。

    【讨论】:

    【解决方案3】:

    您也可以在脚本级别执行此操作。如果您在 index.php 中添加一条规则来检查您是否已通过 GET 变量或只是在没有任何参数的情况下调用页面:

    <?
    
        if(empty($_GET)) 
            header('Location: http://www.yoursite.com/404.php');
        else 
           //your usual script
    
    ?>
    

    然后,您可以控制将人们重定向到 404 错误或显示更有帮助的内容,例如带有索引的登录页面或某种形式的网站导航。

    【讨论】:

    • 谢谢。但我正在尝试使用 mod_rewrite 来做到这一点。一旦设置了这个 mod_rewrite 规则,这将减少 PHP 代码的开销。
    猜你喜欢
    • 2014-10-12
    • 2016-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    • 2022-11-28
    • 1970-01-01
    相关资源
    最近更新 更多