配置Typecho兼容wordpress链接

@vrqq  February 28, 2018

早先的wordpress链接是这样的:https://blog.vrqq.org/?p=15
现在的Typecho是这样的:https://blog.vrqq.org/archives/213/

我们要配置一个跳转,兼容一下。。
配置:nginx with rewrite module
Typecho 1.2

Nginx配置

添加如下配置:

#rewrite ^/?p=([0-9]*)$ /jmp/$1 redirect; #这样是不能用的,下面说。
if ($request_uri ~* "^/\?p=([0-9]*)$" ) {
    set $myarg1 $1;
    rewrite .* https://blog.vrqq.org/jmp/$myarg1? redirect;
}

注释掉的代码是不能用的,nginx用rewrite的时候,正则并不能匹配?(问号),他的匹配方式是匹配问号之前的部分,然后把问号之后的部分附在新的字符串后面。。所以我们要用$request_uri把我们的匹配数字提出来!
$request_uri变量指的是完整的url,例如/q.php?w=123;
$uri就是前半部分 /q.php
正则表达式加括号,就可以用$1,$2了。。
redirect改成last可以在第一层隐式跳转,就是用户浏览器的地址条少闪一下。。

写一个Typecho的Plugin。

好了,看了好多教程没写清楚,Plugin入口的名字一定要是class xxx_Plugin,Action入口的名字要求class xxx_Action,并且有些函数不能乱动。。

// file: Plugin.php
/**
 * @package WpJumper
 * @author vrqq <vrqq3118@163.com>
 * @version 0.0.1
 * @link http://blog.vrqq.org
 */
class WpJumper_Plugin implements Typecho_Plugin_Interface {

    public static function activate() {
        Helper::addAction('wpjumper', 'WpJumper_Action');
        Helper::addRoute("wordpress_jumper","/jmp/[wpid]","WpJumper_Action","wpjump");
    }

    public static function deactivate() {
        Helper::removeRoute("wordpress_jumper");
        Helper::removeAction('wpjumper');
    }

    public static function config(Typecho_Widget_Helper_Form $form) {}
    public static function personalConfig(Typecho_Widget_Helper_Form $form) {}
}
//此处不封口

下一个是响应跳转的文件

// File: Action.php
<?php
class WpJumper_Action extends Typecho_Widget implements Widget_Interface_Do {
        public function __construct($request, $response, $params = NULL)
    {
        parent::__construct($request, $response, $params);
    }

        public function wpjump() {
                $wpdict = array(
                        "15" => '236',
                        "aw" => "ggg"
                );
                $key = $this->request->wpid;
                $url = "/";
                //Helper::options()->siteUrl();
                if ( array_key_exists($key, $wpdict) )
                        $url = "/archives/" . $wpdict[$key];
                $this->response->setHeader('X-Robots-Tag','noindex, nofollow');
                $this->response->redirect($url);
                print("GOTO: " . $url);
                exit;
        }
        public function action(){
        $this->response->goBack();
    }
}
?>

放在webroot/usr/plugins/WpJumper/里面即可,然后千万不要忘记给权限,以及给seLinux权限。。

全文完,祝大家身体健康。


添加新评论