我修改了.htaccess以删除.php
扩展名。
以下代码我使用|| $parts['filename']
修改为不允许直接访问。我的目标是阻止/page.php
或/page
的直接访问。但是它不起作用。
/***************DO NOT ALLOW DIRECT ACCESS************************************/
$parts = pathinfo(__FILE__);
if ( stripos( $_SERVER[ 'REQUEST_URI' ], (basename( __FILE__ ) || $parts['filename'] )) !== FALSE ) {
header("Location: ./");
die();
}
mod之前的代码阻止访问/page.php
但允许访问/page
(我不希望这样)
/***************DO NOT ALLOW DIRECT ACCESS************************************/
if ( stripos( $_SERVER[ 'REQUEST_URI' ], basename( __FILE__ ) ) !== FALSE ) {
header("Location: ./");
die();
}
如何阻止同时访问/page.php
和/page
?
答案 0 :(得分:0)
如果您不想访问页面,请执行以下操作:
if(!defined("IN_SCRIPT")) die();
确保在包含该文件的每个脚本中定义IN_SCRIPT。
像phpBB这样的软件也使用这种方法。
答案 1 :(得分:0)
能够包含来自其他脚本的文件,但不允许通过apache直接提供服务:
在任何要阻止直接访问的php文件的顶部:
<? __FILE__ != $_SERVER['SCRIPT_FILENAME'] || die('no direct access' );
编辑以包含示例
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
<?
header( 'content-type: text/plain');
var_dump( __FILE__ == $_SERVER['SCRIPT_FILENAME'] );
include 'test-inc.php';
<? __FILE__ != $_SERVER['SCRIPT_FILENAME'] || die('no direct access' );
var_dump( __FILE__ == $_SERVER['SCRIPT_FILENAME'] );
bool(true)
bool(false)
no direct access
答案 2 :(得分:-1)
在你的索引中
session_start();
$_SESSION['logged'] = "OK";
然后在您要验证的每个其他文件上包含
session_start();
$login = isset($_SESSION["logged"]) ? $_SESSION["logged"] : false;
if($login != "OK"){
header("Location: path/to/your/index");
exit;
}