防止直接url访问php文件

It *_*ors 11 html php .htaccess server

我在我的网站上有一个php文件说"check.php",并在提交表单时执行.

说我的网站是"myweb.com",php文件位于"PHP"目录中

我想阻止直接url访问"check.php"文件,即如果有人输入网址" myweb.com/PHP/check.php ",则不应执行php文件,而应返回错误消息.

我试图通过在.htaccess中设置规则来阻止访问,但即使我尝试提交表单,它也会阻止php.

.htaccess规则:

RewriteEngine on 
RewriteCond %{THE_REQUEST} \.php[\ /?].*HTTP/ 
(.*)\.php$ /index.html [L] 
Run Code Online (Sandbox Code Playgroud)

有没有可行的办法呢?

Ram*_*der 21

你可以用PHP做到这一点

<?php
    /* at the top of 'check.php' */
    if ( $_SERVER['REQUEST_METHOD']=='GET' && realpath(__FILE__) == realpath( $_SERVER['SCRIPT_FILENAME'] ) ) {
        /* 
           Up to you which header to send, some prefer 404 even if 
           the files does exist for security
        */
        header( 'HTTP/1.0 403 Forbidden', TRUE, 403 );

        /* choose the appropriate page to redirect users */
        die( header( 'location: /error.php' ) );

    }
?>
Run Code Online (Sandbox Code Playgroud)

  • 你的方法就像魅力一样.我只是应用了一点编辑而不是$ _SERVER ['REQ .....] =='GET'我用了....!''POST',因为我使用post方法,它应该只在请求时显示错误不是'贴'谢谢你... (2认同)

Wes*_*bri 7

将此代码放在check.php的顶部:

if(!isset($_SERVER['HTTP_REFERER'])){
    // redirect them to your desired location
    header('location:../index.php');
    exit;
}
Run Code Online (Sandbox Code Playgroud)

如果用户通过直接键入URL访问check.php,它将把他们重定向到您想要的位置。

  • 我不推荐这个。某些浏览器(如Firefox)允许用户出于隐私原因禁止显示Referer标头。 (4认同)