• opencart url美化,增加html后缀


    步骤一:后台开启优化

    步骤二:nginx配置伪静态

    location / {
        try_files $uri @opencart;
    }
    
    location @opencart {
        rewrite ^/sitemap.xml$ /index.php?route=extension/feed/google_sitemap last;
        rewrite ^/googlebase.xml$ /index.php?route=extension/feed/google_base last;
        rewrite ^/payment_callback/(.*) /index.php?route=extension/payment/$1/callback last;
        rewrite ^/callback/(.*) /index.php?route=extension/module/social/login&provider=$1 last;
        rewrite ^/system/download/(.*) index.php?route=error/not_found last;
        rewrite ^/blog$ /index.php?route=panda/blog last;
        rewrite ^/(.+)$ /index.php?_route_=$1 last;
    }
    
    location /admin/ {
        index index.php;
    }
    
    location = /robots.txt {
        allow all;
    }
    
    location ~* (\.(js|css|png|jpg|jpeg|gif|ico|otf|eot|svg|ttf|woff|woff2))$ {
        expires max;
    }
    
    location ~* (\.(tpl|ini|twig|log))$ {
        deny all;
    }

    伪静态来源于,opencart根目录下

    步骤三:开启html后缀

    3.1 url自动带上html

    D:\wwwroot\opencart.net\system\library\url.php第77行

    public function link($route, $args = '', $auto_admin_token = true) {
            $url = $this->url . 'index.php?route=' . (string)$route;
    
            // Add user_token to admin link if it's not passed in
            if ($auto_admin_token && is_admin() && $user_token = array_get(session()->data, 'user_token')) {
                if (is_array($args) && !in_array('user_token', $args)) {
                    $args['user_token'] = $user_token;
                } else if (!str_contains($args, 'user_token')) {
                    $args .= '&user_token=' . $user_token;
                }
            }
    
            if ($args) {
                if (is_array($args)) {
                    $url .= '&' . http_build_query($args);
                } else {
                    $url .= str_replace('&', '&', '&' . ltrim($args, '&'));
                }
            }
    
            foreach ($this->rewrite as $rewrite) {
                $url = $rewrite->rewrite($url);
            }
    
            if ($route == 'common/home') {
                $url = str_replace('index.php?route=common/home&', '?', $url);
                $url = str_replace('index.php?route=common/home', '', $url);
            }
            # $url 改为 $url.'.html'
            return $url.'.html';
        }

    3.2路由过滤掉html(如果不过滤,会指向错误)

    D:\wwwroot\opencart.net\system\engine\action.php 

    public function execute($registry, array $args = array()) {
            // Stop any magical methods being called
            if (substr($this->method, 0, 2) == '__') {
                return new \Exception('Error: Calls to magic methods are not allowed!');
            }
    
            $file = DIR_APPLICATION . 'controller/' . $this->route . '.php';
            $class = 'Controller' . preg_replace('/[^a-zA-Z0-9]/', '', $this->route);
    
    
            /**
             * 连接地址增加后缀 html Author:snails time:2022-01-06
             * */
            # 连接view-source:http://opencart.net/software/imac.html,对应的是_route_
            $request = $registry->get('request');
            if(isset($request->request['_route_']) && !empty($request->request['_route_'])){
                $r = str_replace('.html','',$request->request['_route_']);  // 替换html
                $request->get['_route_'] = $r;
            }
            # 链接http://opencart.net/index.php?route=information/contact.html,对应的是route
            if(isset($request->request['route'])  && !empty($request->request['route'])){
                $r = str_replace('.html','',$request->request['route']);
                $request->get['route'] = $r;
            }
    
            // 重新赋值给get
            $registry->set('request',$request);
            /* End */
    
    
            // Initialize the class
            if (is_file($file)) {
                include_once($file);
    
                $controller = new $class($registry);
            } else {
                return new \Exception('Error: Could not call ' . $this->route . '/' . $this->method . '!');
            }
    
            $reflection = new ReflectionClass($class);
    
            if ($reflection->hasMethod($this->method) && $reflection->getMethod($this->method)->getNumberOfRequiredParameters() <= count($args)) {
                return call_user_func_array(array($controller, $this->method), $args);
            } else {
                return new \Exception('Error: Could not call ' . $this->route . '/' . $this->method . '!');
            }
        }

    注意事项:

    控制路由指向到php文件,到方法的关键位置在get

    $request = $registry->get('request');
    print_r($request);die;

    这里的route有两种形式:route(常规连接),_route_(伪静态连接)

    Request Object
    (
        [get] => Array
            (
                [route] => information/contact.html  #路由转发最核心位置,如果不过滤html转发就报错
            )
    
        [post] => Array
            (
            )
    
        [cookie] => Array
            (
                [folder_language] => zh-cn
                [currency] => CNY
                [language] => en-gb
                [OCSESSID] => b66056cef14556ff2eb1a53db7
                [PHPSESSID] => fg4r8u27hevv2nur7gqno9nuob
                [__atuvc] => 16|1
                [__atuvs] => 61d6c7c16ac98e8b006
            )
    
        [files] => Array
            (
            )
    
        [server] => Array
            (
                )
    
        [request] => Array
            (
                [route] => information/contact.html
            )
    
    )

    3.1路由过滤掉html(如果不过滤,会指向错误)

    99999999
  • 相关阅读:
    ajax(读取json数据)
    MD5加密出现 无法启动:此实现不是Windows平台FIPS验证的加密算法的一部分
    二维码(android)
    电脑快捷键大全
    OkHttp
    HttpURLConnection 传输数据和下载图片
    子线程更新UI界面的2种方法
    URLConnection(互联网)
    点滴
    SQL 备忘录
  • 原文地址:https://www.cnblogs.com/wesky/p/15772475.html
Copyright © 2020-2023  润新知