当然,我总是可以编辑WordPress的.htaccess文件,但这会让我的可湿性粉剂插件有点不标准。相反,通过WordPress中的自定义插件劫持网址的方法是什么?
例如,假设我想要构建一个精致的产品目录,它可以作为插件安装在WordPress中。一旦激活,你就可以进入插件的管理面板,告诉它所有以"/catalog“开头的URL(或者你选择的任何东西)都会转到这个产品目录应用程序。现在应用程序将驻留在wp-content/plugins/mycatalog文件夹中。因此,/catalog/product/400将转到wp-content/plugins/mycatalog/app.php,然后它将从URL中解析出"product“和"400”。
发布于 2009-12-31 19:08:44
我在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重定向到我的劫持插件文件夹中的index.php文件,然后index.php将充当加载到WordPress中的web应用程序的前端控制器。(我希望您熟悉PHP编程的MVC模型。)然后可以重写前端控制器,以根据VARS中的内容调用页面控制器。
发布于 2009-12-31 18:57:17
我不确定我确切地理解了您想要的是什么,但是您总是可以用$_SERVER['REQUEST_URI']检查PHP中请求的文档的URL,并使用parse_url或explode("/", $_SERVER['REQUEST_URI'])之类的东西来分析它。
至于重定向页面,您可以使用带有HTTP重定向或元重定向的header()调用。不过,这些都不是WordPress所特有的。redirection插件可能会完成您所需的工作:
https://stackoverflow.com/questions/1984555
复制相似问题