我有2个文件,index.html和code.php。
在我的html页面中,我有一个表单会在提交时发布到code.php,如下所示:
<form method="post" action="code.php">
我想要做的只是当用户在html表单上单击提交时,才能使code.php对公众可访问。我试图完成这项工作的原因是,当用户输入sites.com/code.php时,它会显示一个未使用表单数据处理的页面,看起来很糟糕,所以我想限制code.php访问。
所以基本上我想做的是,当用户访问sites.com/code.php时,他们会被重定向到index.html,但如果他们浏览表单并点击提交,他们将能够进入已处理的code.php。
我想到了不同的方法来实现这一点,其中一种方法是使用一些php脚本更改code.php的chmod。所以默认情况下code.php是不可读的,但如果用户点击提交,则code.php wpuld的chmod会被更改为可读,从而显示页面,但是当没有办法将用户重定向到index.php时他们只是访问code.php。
如果这有一些奇特的方式,请告诉我! 感谢。
答案 0 :(得分:1)
您可以做的是在未发布表单时重定向回index.html页面。
您可以检查REQUEST_METHOD变量。
if($_SERVER['REQUEST_METHOD'] !== 'POST')
{
Header('Location: http://www.mysite.com/index.html');
exit;
}
答案 1 :(得分:0)
只需设置一个重定向:
<?php
if(!isset($_POST['submit'])) //If form has not been submitted to get to this page
{
header('Location: http://www.domain.com/'); //Redirect
die; //Make sure script ends processing
}
//Rest of code.php
?>
这样一来,如果有人在所需的导航结构之外来到code.php,他们就会被赶回索引。
您也可以将所有内容保存在一个页面上,让表单提交给自己,并包含代码以通过require()或include()处理它(如果表单已提交),如果表单没有,则显示表单已提交或提交时出现错误,并以其他方式显示提交结果,因此甚至没有暴露存在外部php文件的事实。
答案 2 :(得分:0)
另一种方法是检查code.php中的HTTP_REFERRER
。 HTTP_REFERRER
提供当前用户到达页面的源。如果index.html
不是HTTP_REFERRER
,您可以将用户重定向到index.html
。
<?php
$ref = $_SERVER["HTTP_REFERER"];
if ( $ref !== 'http://www.mydomain.com/index.html' )
{
header("Location:http://www.mydomain.com/index.html");
exit;
}
?>