您好我有以下页面,它使用当前URL和简单的外部链接设置cookie。
<?php
function pageURL()
{
$pageURL = 'http';
if ($_SERVER["HTTPS"] == "on")
{
$pageURL .= "s";
}
$pageURL .= "://";
if ($_SERVER["SERVER_PORT"] != "80")
{
$pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
}
else
{
$pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
}
return $pageURL;
}
$CurrentPage = pageURL();
setcookie('linkback', $CurrentPage);
?>
<p><a href="http://www.google.com/">External Link</a></p>
我想要做的是使用PHP为所有外部链接添加前缀,以便它们具有以下结构:
localhost/outgoing?url=http://www.google.com/
这会加载一个外发页面,如下所示:
<?php
if(!isset($_GET['url']))
{
header('HTTP/1.0 404 Not Found');
}
?>
<h1>Warning! Now leaving website</h1>
<ul>
<li><a title="Return to Website" href="<?php if(isset($_COOKIE['linkback'])) { echo $_COOKIE['linkback']; } else { echo 'http://localhost:8888/creathive/'; } ?>">Return to Website</a></li>
<li><a title="Continue to <?php echo $_GET['url']; ?>" href="<?php echo $_GET['url']; ?>">Continue to <?php echo $_GET['url']; ?></a></li>
</ul>
这个想法是使用上一页中设置的cookie我可以有一个简单的后退按钮,并从查询中获取URL并允许用户在被警告他们离开网站后继续。
我遇到的问题是:
1。)为外部URL添加前缀,以便它们转到外发页面
2。)如果用户在没有网址查询字符串的情况下访问传出页面但是不是
,则传出页面顶部的isset应该抛出404 3.。)需要确保URLS有效,例如防止这种情况发生:localhost/outgoing?url=moo
答案 0 :(得分:0)
您需要根据新方案替换代码中的每个外部URL。没有办法为所有传出链接执行此自动操作。
这是因为,如果用户点击外部网址,请求不会发送到您的服务器,而是发送给外部服务器。
修改强> 您唯一能做的就是使用ob_start()缓存所有输出,然后使用正则表达式替换所有链接,然后再将其打印到页面上。
但更好的解决方案是自己更换所有链接。
答案 1 :(得分:0)
你能详细说明吗?
Isset不是“正确”的工具。尝试arrya_key_exists('url',$ _GET)......像这样的代码应该做你。
function haveUrl() {
if (array_key_exists('url', $_GET)) {
$url = $_GET['url'];
if (!empty($url)) return true;
}
return false;
}
function validUrl($url) {
if (preg_match('\^(http:\/\/|https:\/\/)\mi', $url) {
if (preg_match('\localhost\mi', $url) return false;
else return trus;
}
return false;
}
答案 2 :(得分:0)
1)我会为所有链接创建一个类,并使用类似$ links-&gt; create(“http:// ...”)的内容 在那里你可以放置重定向和你可能需要的一切。
3)
您可以使用以下链接中的代码: link text
答案 3 :(得分:0)
1。)为外部URL添加前缀,以便它们转到外发页面
你需要一个DOM工具。例如,SimpleXML或Simple HTML DOM parser或其中任何一种操作您正在呈现的页面上的外向链接。 (在this question中查找更多可用选项。)
最理想的情况是,您将缓存此操作的结果,因为它可能非常昂贵(读取:慢)并在更新时或在定义的时间段后更新缓存版本。
2。)如果用户在没有网址查询字符串的情况下访问传出页面但是不是
,则传出页面顶部的isset应该抛出404
是的,但是如果您不想渲染页面的其余部分,则需要在此之后停止执行。 404错误可以 - 而且应该! - 有一个页面主体,它像任何其他HTTP响应一样响应。
3.。)需要确保URLS有效,例如防止发生这种情况:localhost / outgoing?url = moo
即使您这样做 - 确实应该这样做,也不会阻止任何人通过手动URL操作访问localhost/outgoing?url=foo
。 Url参数或任何其他用户输入永远不可信任。换句话说,无论如何,您都需要检查传出脚本中的传出URL。
不要忘记严格消毒!像这样的功能是尖叫被滥用。