HEX
Server: nginx/1.28.3
System: Linux VM-0-7-opencloudos 6.6.117-45.oc9.x86_64 #1 SMP Thu Dec 4 10:26:39 CST 2025 x86_64
User: www (1000)
PHP: 8.2.28
Disabled: passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Upload Files
File: /www/wwwroot/www.213n.cn/wp-content/plugins/smart-seo-tool/classes/rewrite.class.php
<?php
/**
 * Author: wbolt team
 * Author URI: https://www.wbolt.com/
 */

class Smart_SEO_Tool_Rewrite
{



	public static function cnf($key,$default=null){
	    return Smart_SEO_Tool_Admin::cnf($key,$default);
    }

	public static function init(){

        if(self::cnf('url_seo.active')){
            if(self::cnf('url_seo.reset_tag')) {
                self::rewrite_tag();
            }
            if(self::cnf('url_seo.hide_category')){
                self::no_category();
            }
            if(self::cnf('url_seo.set_gopage')) {
                self::rewrite_go();
            }

            add_filter('the_content',array(__CLASS__,'the_content'),40);
        }
        add_action('parse_query',array(__CLASS__,'parse_query'));
        add_action('wb_sst_option_update',function($new,$old){
            if($new['url_seo']['active'] != $old['url_seo']['active']){
                if($new['url_seo']['active']){//0->1
                    self::update_rewrite($new,$old,1);
                }else{//1->0
                    self::update_rewrite($new,$old,0);
                }

            }else if($new['url_seo']['active']){//1->1
                self::update_rewrite($new,$old,2);
            }

        },11,2);
    }

    public static function parse_query($obj)
    {
        $seo = self::cnf('url_seo');
        if(is_tag() && $seo && isset($seo['active']) && $seo['active'] && isset($seo['reset_tag']) && $seo['reset_tag']){
            if(isset($obj->query['tag'])){
                $q = get_queried_object();
                if($q instanceof WP_Term){
                    wp_redirect(get_term_link($q,$q->taxonomy),301);
                    exit();
                }
            }
        }

    }

    public static function update_rewrite($new,$old,$state = null)
    {
        global $wp_rewrite;
        if(!$wp_rewrite->using_permalinks()){
            return;
        }
        $new = $new['url_seo'];
        $old = $old['url_seo'];
        if(0 === $state){//close all, remove all rewrite

            self::remove_category_permastruct();
            remove_filter('category_rewrite_rules', array(__CLASS__,'category_rewrite_rules'));

            remove_filter('rewrite_rules_array',array(__CLASS__,'tag_rewrite_rules_array'));
            remove_filter('rewrite_rules_array',array(__CLASS__,'go_rewrite_rules_array'));

            $wp_rewrite->flush_rules();
            return;
        }

        //1 open status new , 2 open state old
        if($new['reset_tag'] != $old['reset_tag']){//rewrite tag
            if($new['reset_tag']){//0->1
                //add_action('generate_rewrite_rules',array(__CLASS__,'tag_rewrite_rules'));
                add_filter('rewrite_rules_array',array(__CLASS__,'tag_rewrite_rules_array'));
                add_filter('post_tag_rewrite_rules',array(__CLASS__,'post_tag_rewrite_rules'));
            }else{//1-0
                //remove_action('generate_rewrite_rules',array(__CLASS__,'tag_rewrite_rules'));
                remove_filter('rewrite_rules_array',array(__CLASS__,'tag_rewrite_rules_array'));
                remove_filter('post_tag_rewrite_rules',array(__CLASS__,'post_tag_rewrite_rules'));
            }
        }else if($new['reset_tag'] && 1 === $state){
            //add_action('generate_rewrite_rules',array(__CLASS__,'tag_rewrite_rules'));
            add_filter('rewrite_rules_array',array(__CLASS__,'tag_rewrite_rules_array'));
            add_filter('post_tag_rewrite_rules',array(__CLASS__,'post_tag_rewrite_rules'));
        }
        if($new['hide_category'] != $old['hide_category']){
            if($new['hide_category']){//0->1
                add_filter('category_rewrite_rules', array(__CLASS__,'category_rewrite_rules'));
                self::category_permastruct();
            }else{//1->0
                remove_filter('category_rewrite_rules', array(__CLASS__,'category_rewrite_rules'));
                self::remove_category_permastruct();
            }
        }else if($new['hide_category'] && 1 === $state){
            add_filter('category_rewrite_rules', array(__CLASS__,'category_rewrite_rules'));
            self::category_permastruct();
        }
        if($new['set_gopage']!=$old['set_gopage']){
            if($new['set_gopage']){//0->1
                //add_action('generate_rewrite_rules',array(__CLASS__,'go_rewrite_rules'));
                add_filter('rewrite_rules_array',array(__CLASS__,'go_rewrite_rules_array'));
            }else{//1->0
                //remove_action('generate_rewrite_rules',array(__CLASS__,'go_rewrite_rules'));
                remove_filter('rewrite_rules_array',array(__CLASS__,'go_rewrite_rules_array'));
            }
        }else if($new['set_gopage'] && 1 === $state){
            //add_action('generate_rewrite_rules',array(__CLASS__,'go_rewrite_rules'));
            add_filter('rewrite_rules_array',array(__CLASS__,'go_rewrite_rules_array'));
        }
        $wp_rewrite->flush_rules();
    }

    public static function flush_rewrite(){
        global $wp_rewrite;
        $wp_rewrite->flush_rules();
    }

    public static function remove_rewrite(){

        //remove_action('generate_rewrite_rules',array(__CLASS__,'go_rewrite_rules'));
        remove_filter('rewrite_rules_array',array(__CLASS__,'go_rewrite_rules_array'));

        //remove_action('generate_rewrite_rules',array(__CLASS__,'tag_rewrite_rules'));
        remove_filter('rewrite_rules_array',array(__CLASS__,'tag_rewrite_rules_array'));
        remove_filter('post_tag_rewrite_rules',array(__CLASS__,'post_tag_rewrite_rules'));

        self::remove_category_permastruct();
        remove_filter('category_rewrite_rules',array(__CLASS__,'category_rewrite_rules'));
        //wp_clear_scheduled_hook('sm_ping_daily');
    }

    public static function rewrite_go(){

        //add_action('generate_rewrite_rules',array(__CLASS__,'go_rewrite_rules'));
        add_filter('rewrite_rules_array',array(__CLASS__,'go_rewrite_rules_array'));
        add_filter('query_vars',array(__CLASS__,'go_query_vars'));
        add_action('parse_request',array(__CLASS__,'go_302'));
    }

    public static function go_rewrite_rules_array($rules){
        $new_rules = array(
            'go/?$' => 'index.php?go=1',
        );
        return $new_rules + $rules;
    }
    public static function go_rewrite_rules($wp_rewrite){
        $new_rules = array(
            'go/?$' => 'index.php?go=1',
        );
        $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
    }

    public static function go_query_vars($public_query_vars){
        $public_query_vars[] = 'go';
	    return $public_query_vars;
    }

    public static function go_302($wp) {
        $query_vars = $wp->query_vars;
        $redirect = isset($_GET['_']) && $_GET['_'] ? trim(sanitize_text_field($_GET['_'])):null;
        if( isset( $query_vars['go'] ) && $query_vars['go'] && $redirect ) {
            $nonce = substr($redirect,0,10);
            $url = base64_decode(substr($redirect,10));
            //header('content-type:text/html;charset="utf-8"');
            if($url && $nonce && self::redirect_nonce($url,$nonce)) {
                header("Location: $url");
                exit(0);
            }
            $wp->query_vars['pagename'] = 'go-404';
        }
    }

    public static function redirect_nonce($url,$nonce = null){
        $key = home_url();
        if(defined('NONCE_KEY')){
            $key = NONCE_KEY;
        }else if(defined('AUTH_KEY')){
            $key = AUTH_KEY;
        }

        $source = substr(md5($key.$url),12,10);

	    if(null === $nonce){
	        return $source;
        }

        return $source == $nonce;
    }

    public static function the_content($content){
	    if(!is_single()){
	        return $content;
        }
	    $rewrite_go = self::cnf('url_seo.set_gopage');
	    $rewrite_rel = self::cnf('url_seo.set_nofollow');
	    $rewrite_target = self::cnf('url_seo.blank');

	    if(!($rewrite_go || $rewrite_rel || $rewrite_target)){
	        return $content;
        }

        if(!preg_match_all('#<a.+?href=[^>]+>#',$content,$match)){
            return $content;
        }



        $exclude = self::cnf('url_seo.exclude',array());


        foreach ($match[0] as $k=>$v){

            $search_html = $v;

            if(!preg_match('#href=("|\')(.+?)\1#',$v,$sm)){
                continue;
            }

            if(!$sm[2]){
                continue;
            }

            $url = trim($sm[2]);

            $se_url = $url;
            if(!preg_match('#^https?://#',$url)){
                continue;
            }
            if(strpos($url,home_url())===0){
                continue;
            }
            if($exclude){
                $find_it = false;
                foreach($exclude as $domain){
                    if(preg_match('#://[^/]*'.preg_quote($domain).'/?#',$url)){
                        $find_it = true;
                        break;
                    }
                }

                if($find_it){
                    continue;
                }
            }


            $replace_html = $search_html;

            if($rewrite_go){
                $nonce = self::redirect_nonce($url);
                $url = home_url('/go?_=').urlencode($nonce.base64_encode($url));
                $replace_html = str_replace($se_url,$url,$search_html);
            }

            if($rewrite_rel){
                if(preg_match('#rel="([^"]+)"#is',$replace_html,$m) || preg_match("#rel='[^']+'#is",$replace_html,$m) ){
                    $a = explode(' ',$m[1]);

                    if(!in_array('noopener',$a)){
                        array_push($a,'noopener');
                    }
                    if(!in_array('noreferrer',$a)){
                        array_push($a,'noreferrer');
                    }
                    if(!in_array('nofollow',$a)){
                        array_push($a,'nofollow');
                    }
                    $replace_html = str_replace($m[1],implode(' ',$a),$replace_html);
                    /*if(!preg_match('#nofollow#i',$m[1])){
                        $replace_html = str_replace($m[1],$m[1].' nofollow',$replace_html);
                    }*/

                }else if(!preg_match('#rel=.*?nofollow.*?#is',$replace_html)){

                    $replace_html = substr($replace_html,0,-1).' rel="noopener noreferrer nofollow">';
                }
            }
            if($rewrite_target){
                if(!preg_match('#target=#i',$replace_html)){
                    $replace_html = substr($replace_html,0,-1).' target="_blank">';
                }

            }

            $content = str_replace($search_html,$replace_html,$content);


        }

        return $content;
    }

    public static function rewrite_tag(){

        //add_action('generate_rewrite_rules',array(__CLASS__,'tag_rewrite_rules'));
        add_filter('rewrite_rules_array',array(__CLASS__,'tag_rewrite_rules_array'));
        add_filter('post_tag_rewrite_rules',array(__CLASS__,'post_tag_rewrite_rules'));
        add_filter('term_link',array(__CLASS__,'tag_term_link'),10,3);

        add_action('query_vars', array(__CLASS__,'tag_query_vars'));
    }

    public static function post_tag_rewrite_rules($rules){

	    return $rules;
	    //return array();
    }

    public static function tag_rewrite_rules_array($rules){
        $new_rules = array(
            'tag/(\d+)/feed/(feed|rdf|rss|rss2|atom)/?$' => 'index.php?tag_id=$matches[1]&feed=$matches[2]',
            'tag/(\d+)/(feed|rdf|rss|rss2|atom)/?$' => 'index.php?tag_id=$matches[1]&feed=$matches[2]',
            'tag/(\d+)/embed/?$' => 'index.php?tag_id=$matches[1]&embed=true',
            'tag/(\d+)/page/(\d+)/?$' => 'index.php?tag_id=$matches[1]&paged=$matches[2]',
            'tag/(\d+)/?$' => 'index.php?tag_id=$matches[1]',
        );
        return $new_rules + $rules;
    }

    public static function tag_rewrite_rules($wp_rewrite){

        $new_rules = array(
            'tag/(\d+)/feed/(feed|rdf|rss|rss2|atom)/?$' => 'index.php?tag_id=$matches[1]&feed=$matches[2]',
            'tag/(\d+)/(feed|rdf|rss|rss2|atom)/?$' => 'index.php?tag_id=$matches[1]&feed=$matches[2]',
            'tag/(\d+)/embed/?$' => 'index.php?tag_id=$matches[1]&embed=true',
            'tag/(\d+)/page/(\d+)/?$' => 'index.php?tag_id=$matches[1]&paged=$matches[2]',
            'tag/(\d+)/?$' => 'index.php?tag_id=$matches[1]',
        );
        $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;

    }

    public static function tag_term_link($link,$term,$taxonomy){
        if($taxonomy=='post_tag'){
            return home_url('/tag/'.$term->term_id);
        }

        return $link;
    }

    public static function tag_query_vars($public_query_vars){

        $public_query_vars[] = 'tag_id';
        return $public_query_vars;
    }

    public static function category_rewrite_name()
    {
        $base = trim(get_option('category_base'));
        if(!$base){
            $base = 'category';
        }
        return $base.'_rewrite_rules';
    }

    public static function no_category(){
	    //print_r(__CLASS__);exit();
        add_action('created_category',  array(__CLASS__,'flush_rewrite'));
        add_action('delete_category',   array(__CLASS__,'flush_rewrite'));
        add_action('edited_category',   array(__CLASS__,'flush_rewrite'));

        add_action('init',array(__CLASS__,'category_permastruct'));


        add_filter('category_rewrite_rules', array(__CLASS__,'category_rewrite_rules'));


        add_filter('query_vars',array(__CLASS__,'category_query_vars'));
        //add_filter('request',function($query_vars){return $query_vars;});
        add_action('parse_request',array(__CLASS__,'category_301'));

    }

    public static function category_rewrite_rules($category_rewrite) {
        global $wp_rewrite;
        $category_rewrite=array();

        $categories = get_categories( array( 'hide_empty' => false ) );

        foreach( $categories as $category ) {
            $category_slug = $category->slug;

            if ( $category->parent == $category->cat_ID ) {
                $category->parent = 0;
            }
            if ( $category->parent != 0 ) {
                $category_slug = get_category_parents( $category->parent, false, '/', true ) . $category_slug;
            }

            $category_rewrite['('.$category_slug.')/(?:feed/)?(feed|rdf|rss|rss2|atom)/?$'] = 'index.php?category_name=$matches[1]&feed=$matches[2]';
            $category_rewrite["({$category_slug})/{$wp_rewrite->pagination_base}/?([0-9]{1,})/?$"] = 'index.php?category_name=$matches[1]&paged=$matches[2]';
            $category_rewrite['('.$category_slug.')/?$'] = 'index.php?category_name=$matches[1]';
        }

        $slug = get_option( 'category_base' );
        if(empty($slug)){
            $slug = 'category';
        }

        $category_rewrite[$slug.'/(.*)$'] = 'index.php?category_301=$matches[1]';

        return $category_rewrite;
    }

    public static function remove_category_permastruct(){
        global $wp_rewrite;
        $slug = get_option( 'category_base' );
        if(empty($slug)){
            $slug = 'category';
        }
        $wp_rewrite->extra_permastructs['category']['struct'] = $slug.'/%category%';
    }

    public static function category_permastruct(){
        global $wp_rewrite;
        /*if(!$wp_rewrite->using_permalinks()){
            return;
        }*/
        $wp_rewrite->extra_permastructs['category']['struct'] = '%category%';
    }

    public static function category_query_vars($public_query_vars) {
        $public_query_vars[] = 'category_301';
        return $public_query_vars;
    }

    public static function category_301($wp) {
        $query_vars = $wp->query_vars;
        if( isset( $query_vars['category_301'] ) && $query_vars['category_301']  ) {
            $redirect = home_url('/').user_trailingslashit($query_vars['category_301'],'category');
            header( "Location: $redirect" ,true,301);
            exit();
        }
    }



}