插件如何在WordPress中劫持URL?

时间:2009-12-31 08:42:31

标签: php wordpress plugins

当然我总是可以编辑WordPress的.htaccess文件,但这会让我的WP插件有点不标准。相反,通过WordPress中的自定义插件劫持URL的方法是什么?

例如,假设我想构建一个精心制作的产品目录,可以作为插件安装在WordPress中。激活后,您可以进入插件的管理面板,并告诉它所有以“/ catalog”(或您选择的任何内容)开头的URL都将转到此产品目录应用程序。现在该应用程序将驻留在wp-content / plugins / mycatalog文件夹中。那么,/ catalog / product / 400会转到wp-content / plugins / mycatalog / app.php,它会解析URL中的“product”和“400”。

2 个答案:

答案 0 :(得分:1)

我在路径wp-content / plugins / hijack中创建了一个插件文件夹,然后将这个文件插入了plugin.php。

<?php
/*
Plugin Name: Hijack
Plugin URI: http://example.com/contact
Description: Sample URL Hijacker Plugin
Author: John Doe
Version: 1.1
Author URI: http://example.com/contact
*/

add_filter('init','Hijack');

function Hijack() {
    $URL = get_bloginfo('wpurl');
    $PLUGIN = $_SERVER['SCRIPT_FILENAME'];
    $PLUGIN = str_replace('/index.php','',$PLUGIN);
    $PLUGIN = $PLUGIN . '/wp-content/plugins/hijack';

    $sHijack = '/catalog';

    $sURL = $_SERVER['REDIRECT_URL'];
    if (strpos(' ' . $sURL,$sHijack)>0) {
        $sYank = $URL;
        $sYank = str_replace('http://','',$sYank);
        $sYank = str_replace('https://','',$sYank);
        $sYank = str_replace($_SERVER['SERVER_NAME'] . '/','',$sYank);
        $sYank = $sYank . $sHijack;
        $sTemp = str_replace($sYank,'',$sURL);
        $sTemp = str_replace($sYank . '/','',$sTemp);
        $sTemp = str_replace('//','/',$sTemp);
        if ((substr($sTemp,-1,1) == '/') and ($sTemp != '/')) {
            $sTemp = substr($sTemp, 0, -1);
        }
        define('VARS',$sTemp);
        include($PLUGIN . '/index.php');
        exit(0);
    }
}

然后,从那里,我添加了wp-content / plugins / hijack / index.php作为测试用例并使用了这段代码:

<?php

echo VARS;
echo "<br />\n";
print_r($_GET);

此时,当插件被激活时,我可以将/ catalog,/ catalog / products / 400等所有URL重定向到我的hijack插件文件夹中的index.php文件,然后index.php将执行就像我在WordPress中加载的Web应用程序的前端控制器一样。 (我希望您熟悉PHP编程的MVC模型。)然后可以根据VARS中的内容重写前端控制器以调用页面控制器。

答案 1 :(得分:0)

我不确定我到底知道您想要什么,但您始终可以使用$_SERVER['REQUEST_URI']在PHP中检查所请求的文档网址,并使用parse_urlexplode("/", $_SERVER['REQUEST_URI'])之类的内容解剖它。

对于重定向页面,您可以使用带有HTTP重定向或META重定向的header()调用。但这些都不是 WordPress 特有的。 redirection插件可能会满足您的需求:

http://wordpress.org/extend/plugins/redirection/