当然我总是可以编辑WordPress的.htaccess文件,但这会让我的WP插件有点不标准。相反,通过WordPress中的自定义插件劫持URL的方法是什么?
例如,假设我想构建一个精心制作的产品目录,可以作为插件安装在WordPress中。激活后,您可以进入插件的管理面板,并告诉它所有以“/ catalog”(或您选择的任何内容)开头的URL都将转到此产品目录应用程序。现在该应用程序将驻留在wp-content / plugins / mycatalog文件夹中。那么,/ catalog / product / 400会转到wp-content / plugins / mycatalog / app.php,它会解析URL中的“product”和“400”。
答案 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_url
或explode("/", $_SERVER['REQUEST_URI'])
之类的内容解剖它。
对于重定向页面,您可以使用带有HTTP重定向或META重定向的header()
调用。但这些都不是 WordPress 特有的。 redirection
插件可能会满足您的需求: