是否可以通过使用PHP将用户重定向到不同的页面?
假设用户转到www.example.com/page.php,我想将其重定向到www.example.com/index.php,那么在不使用元刷新的情况下,我如何做到这一点?有可能吗?
这甚至可以保护我的页面免受未授权用户的攻击。
是否可以通过使用PHP将用户重定向到不同的页面?
假设用户转到www.example.com/page.php,我想将其重定向到www.example.com/index.php,那么在不使用元刷新的情况下,我如何做到这一点?有可能吗?
这甚至可以保护我的页面免受未授权用户的攻击。
当前回答
试试这个
$url = $_SERVER['HTTP_REFERER'];
redirect($url);
其他回答
您可以使用会话变量控制对页面的访问并授权有效用户:
<?php
session_start();
if (!isset( $_SESSION["valid_user"]))
{
header("location:../");
exit();
}
// Page goes here
?>
http://php.net/manual/en/reserved.variables.session.php.
最近,我受到了网络攻击,并决定,我需要了解试图访问管理面板或web应用程序的保留部分的用户。
因此,我在文本文件中添加了IP地址和用户会话的日志访问,因为我不想打扰我的数据库。
要将访问者重定向到另一个页面(在条件循环中特别有用),只需使用以下代码:
<?php
header('Location: mypage.php');
?>
在本例中,mypage.php是要将访问者重定向到的页面的地址。此地址可以是绝对地址,也可以包含以下格式的参数:mypage.php?param1=值1&m2=值2)
相对/绝对路径
在处理相对或绝对路径时,最好从服务器的根目录中选择一个绝对路径(DOCUMENT_root)。使用以下格式:
<?php
header('Location: /directory/mypage.php');
?>
如果目标页面位于另一台服务器上,则包含完整的URL:
<?php
header('Location: http://www.ccm.net/forum/');
?>
HTTP头处理模块
根据HTTP协议,必须在任何类型的内容之前发送HTTP标头。这意味着在标题之前不应该发送任何字符,甚至不能发送空白!
临时/永久重定向
默认情况下,上面显示的重定向类型是临时重定向。这意味着谷歌搜索等搜索引擎在索引时不会考虑重定向。
如果您希望通知搜索引擎页面已永久移动到其他位置,请使用以下代码:
<?
header('Status: 301 Moved Permanently', false, 301);
header('Location: new_address');
?>
例如,此页面包含以下代码:
<?
header('Status: 301 Moved Permanently', false, 301);
header('Location: /pc/imprimante.php3');
exit();
?>
当您单击上面的链接时,将自动重定向到此页面。此外,它是永久重定向(状态:301已永久移动)。因此,如果您在Google中键入第一个URL,您将自动重定向到第二个重定向链接。
PHP代码的解释
位于header()之后的PHP代码将由服务器解释,即使访问者移动到重定向中指定的地址。在大多数情况下,这意味着您需要一个方法来跟随exit()函数的header()函数,以减少服务器的负载:
<?
header('Status: 301 Moved Permanently', false, 301);
header('Location: address');
exit();
?>
以下是我的想法:
IMHO,重定向传入请求的最佳方法是使用位置标头
<?php
header("Location: /index.php");
?>
一旦执行了该语句并发出输出,浏览器将开始重新引导用户。但是,请确保在发送头之前没有任何输出(任何echo/var_dump),否则会导致错误。
虽然这是一种快速而肮脏的方式来实现最初的要求,但最终会成为一场SEO灾难,因为这种重定向总是被解释为301/302重定向,因此搜索引擎将始终将您的索引页视为重定向页,而不是登录页/主页。
因此,它会影响网站的SEO设置。
现有答案汇总加上我自己的两分钱:
1.基本答案
您可以使用header()函数发送新的HTTP标头,但必须在任何HTML或文本之前(例如,在<!DOCTYPE…>声明之前)将其发送到浏览器。
header('Location: '.$newURL);
2.重要细节
die()或exit()
header("Location: https://example.com/myOtherPage.php");
die();
为什么应该使用die()或exit():每日WTF
绝对或相对URL
自2014年6月起,可以使用绝对URL和相对URL。请参阅RFC 7231,它取代了旧的RFC 2616,其中只允许绝对URL。
状态代码
PHP的“位置”标头仍然使用HTTP 302重定向代码,这是一个“临时”重定向,可能不是您应该使用的重定向。您应该考虑301(永久重定向)或303(其他)。
注意:W3C提到303标头与“许多HTTP/1.1之前的用户代理”不兼容。当前使用的浏览器都是HTTP/1.1用户代理。这对于许多其他用户代理(如蜘蛛和机器人)来说是不正确的。
3.文件
PHP中的HTTP Headers和header()函数
PHP手册的内容维基百科说什么W3C的说法
4.备选方案
您可以使用http_redirect($url);这需要安装PECL包PECL。
5.助手函数
此功能不包含303状态代码:
function Redirect($url, $permanent = false)
{
header('Location: ' . $url, true, $permanent ? 301 : 302);
exit();
}
Redirect('https://example.com/', false);
这更加灵活:
function redirect($url, $statusCode = 303)
{
header('Location: ' . $url, true, $statusCode);
die();
}
6.解决方法
如前所述,header()重定向只在写入任何内容之前生效。如果在midst HTML输出中调用,它们通常会失败。然后,您可以使用HTML标头解决方法(不是很专业!),如:
<meta http-equiv="refresh" content="0;url=finalpage.html">
甚至是JavaScript重定向。
window.location.replace("https://example.com/");
1.使用内置PHP函数header
a) 无参数的简单重定向
<?php
header('Location: index.php');
?>
b) 使用GET参数重定向
<?php
$id = 2;
header("Location: index.php?id=$id&msg=succesfully redirect");
?>
2.在PHP中使用JavaScript重定向
a) 无参数的简单重定向
<?php
echo "<script>location.href='index.php';</script>";
?>
b) 使用GET参数重定向
<?php
$id = 2;
echo "<script>location.href='index.php?id=$id&msg=succesfully redirect';</script>";
?>