WordPress插件中的URL隐藏

时间:2012-10-04 05:54:50

标签: php redirect wordpress-plugin wordpress

我打算用以下方式隐藏链接网址。它将urls存储在一个数组中,然后如果它检测到$ _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,则不会重定向。

我认为这与此处描述的问题几乎相同。 Looking for more efficient way to serve numerous link redirects?但是对于分布式插件,编辑.htaccess文件是否现实/实用?我想并非所有用户都有权修改.htaccess。我不确定。

我想知道是否有人能指引我走向正确的方向。

1 个答案:

答案 0 :(得分:1)

这取决于您的申请。通常你可以做其他SO帖子描述的内容,但如果它真的是随机的;或者您无法控制重定向的网站 - 使用数据库。它的功能是快速找到您在硬盘上寻找的内容。

现在想到比你现在的方法更进一步 - 那么双向混淆呢?如果它只是混淆(不是安全性)使用这样的算法,你可以加密和解密网址。这样你就不需要存储任何数据了。