0

我打算用以下方式隐藏链接网址。它将 url 存储在一个数组中,然后如果它检测到 $_GET 数组中的参数,它会重定向到保存的 url。

<?
/* Plugin Name: Sample Link Cloak  */

add_action('admin_menu', 'sample_link_cloak');
function sample_link_cloak() {
    add_options_page(
        'Sample Link Cloak', 
        'Sample Link Cloak', 
        'manage_options',
        'sample_link_cloak', 
        'sample_link_cloak_admin');
}
function sample_link_cloak_admin() {
    ?>
    <div class="wrap">
    <?php
        $links = '<p><a href="http://www.google.com">google.com</a></p>' . PHP_EOL
                . '<p><a href="http://www.wordpress.org">wordpress.org</a></p>' . PHP_EOL
                . '<p><a href="http://www.stackoverflow.com">stackoverflow.com</a></p>' . PHP_EOL;

        $doc = new DOMDocument();   
        @$doc->loadHTML($links);    
        $array_urls = array();
        foreach ($doc->getElementsByTagName('a') as $node) {
            $url = $node->getAttribute('href');
            $hash = md5($url);
            $array_urls[$hash] = $url;
            $url = site_url('?urlcloak=' . $hash);
            $node->setAttribute('href', $url);
        }       
        echo $doc->saveXML();
        update_option('sample_urlcloak', $array_urls);
    ?>
    </div>
    <?php
}
add_action('init', 'cloakurls');
function cloakurls() {
    if (isset($_GET['urlcloak'])) {
        $array_urls = get_option('sample_urlcloak');
        wp_redirect($array_urls[$_GET['urlcloak']]);
        exit;       
    }
}

我可以用这种方法预测一个问题。链接的数量每天都在增加,因此存储的数据在达到一定程度时必须删除。但是如果访问者将网页保存在本地驱动器上并稍后阅读内容并单击链接,此时如果服务器不存储url,则不会重定向。

我认为这与此处描述的问题几乎相同。寻找更有效的方式来提供大量链接重定向?但是对于分布式插件,编辑 .htaccess 文件是否现实/实用?我猜不是所有用户都有权修改.htaccess。我不知道。

我想知道是否有人可以指导我正确的方向。

4

1 回答 1

1

这取决于您的应用程序。通常你可以做其他SO帖子描述的事情,但如果它真的是随机的;或者您无法控制重定向的站点 - 使用数据库。它的功能是在硬盘驱动器上快速找到您要查找的内容。

现在想知道比您当前的方法更进一步 - 双向混淆怎么样?如果只是混淆(而不是安全),请使用这样一种算法,您可以同时加密和解密 url。这样你就不需要存储任何数据。

于 2012-10-04T06:04:00.410 回答