自己的专属多功能跳转页

2020-09-13T09:00:00

引言

最近突发奇想,把hovthen.com充分利用起来。
相较而言网址更短,也更加容易被记住!

计划

用来做跳转挺不错的,类似 t.cn/XXX ,初步计划要实现下面这种功能:

  • 首先就是在后面输入一个字符串,自动跳转到指定网址
hovthen.com/blog >>> blog.hovthen.com  
  • 没有参数时不跳转正常显示页面,或在其后添加一个标记后正常显示页面
hovthen.com >>> hovthen.com  
hovthen.com >>> hovthen.com/hello  
  • 由于博客用的是数字结尾,为了更加方便的访问博客指定文章,在后面加一个数字访问到指定ID文章页:
hovthen.com/8 >>> www.hovthen.com/8  
  • 考虑到博客文章ID是大于0的正整数,其他数字就随机访问到一篇文章:
hovthen.com/0 >>> blog.hovthen.com/随机ID  
  • (待补)还要加入白名单网址的功能,以便跳转到外站:
hovthen.com/www.baidu.com >>> www.baidu.com  

开始

说干就干,作为一个合格的小白,首先去百度找下资料。

众所周知,WordPress有个go.php,就以这个为关键词搜索,果然发现了不少代码。尽管不会写,但照着改还是挺简单的。

首先估计要两个或者三个参数,先假设一个有完整参数的链接:

hovthen.com/index.php?k=key&v=value&t=urllink

获取参数

首先要获取地址栏的参数参数值:

$value = $_GET['v'];

参数判断

然后要对参数值进行判断,根据不同的内容跳转至不同的网址:

$index = 'hello';
if( $value>='0' ) {        
    Header("Location:https://www.hovthen.com/$value");
} else {
    Header("Location:https://hovthen.com/$index");
}

实现随机

生成随机数,和上面的判断结合就可以实现随机跳转到一个博客文章了:

$num_max = 7;
$num = rand(4,$num_max);
Header("Location:https://www.hovthen.com/$num");

把最小值改成第一篇正文的ID,最大值改成发布文章的ID值,以免跳转到未发布或无阅读意义的文章页。

此方法可能不适用于WordPress,因为其会大量占用ID,正因如此才将博客搬回Typecho的!
为了更好的效果,直接登录数据库修改数据表,将独立页面的ID置前!

关键词跳转

首先弄一个词库,写在同目录 data_url.json 文件中,格式如下:

{
    "hello":"http://hovthen.com/hello",
    "home":"https://www.hovthen.com/",
    "blog":"https://blog.hovthen.com/"
}

然后通过下面的代码去获取文件内容,然后直接跳转对应网址:

$data_url = file_get_contents('data_url.json');
$data = json_decode($data_url, true);
Header("Location:$data[$key]");

最终成品

将上面代码拼接一下,得到最终的成品如下:

index.php

<?php
$value = $_GET['v'];
$key = $_GET['k'];
$index = 'hello';
$num_max = 7;
$data_url = file_get_contents('data_url.json');
$data = json_decode($data_url, true);
if( $key=='' ) {
    if( $value=='' ) {        
        Header("Location:https://hovthen.com/$index");
    } else {
        Header("Location:https://hovthen.com/$index");
    }
} else {
    if ( $key<='0' ) {
        $num = rand(4,$num_max);
        Header("Location:https://www.hovthen.com/$num");
    } else {
        if ( $key>=1 ) {
            Header("Location:https://www.hovthen.com/$key");
        } else {
            if ( $key==$value ) {
                Header("Location:$value");
            } else {
                if ( $data[$key]=='' ) {
                    Header("Location:https://hovthen.com/$index");
                } else {
                    Header("Location:$data[$key]");
                }
            }
        }
    }
}
?>

data_url.json

{
    "hello":"http://hovthen.com/hello",
    "home":"https://www.hovthen.com/",
    "blog":"https://blog.hovthen.com/"
}

Nginx伪静态

很显然并没有完全实现预期的效果,请继续往下看!

测试优化

经过上面的一顿操作,终于实现了大部分功能,但是还是必须得输入完整网址才可以:

hovthen.com/index.php?k=key&v=value&t=urllink

并不是想要的

hovthen.com/key&v=value&t=urllink

仔细观察可以发现两者的区别在于" index.php?k= "的有无,可以考虑使用伪静态了。
我用的Nginx,又是百度一顿抄,终于写出了自己的:

rewrite ^/hello$ /xxx/ last;
if (!-e $request_filename) {
    rewrite ^/(?!.well-known)(.*)$ /index.php?k=$1 last;
}

这个分为两部分,说明一下:

rewrite ^/hello$ /xxx/ last;
#根据标记" hello ",自动显示" /xxx/ "文件夹下的内容
if (!-e $request_filename) {
    rewrite ^/(?!.well-known)(.*)$ /index.php?k=$1 last;
}
#首先判断存不存在该目录或文件,不存在的话就将其做为" index.php "的参数进行访问

比如主路径有如下文件:

abc/
xxx/index.html
index.php
data_url.json
home.html

那么访问便会有如下可能:

/abc >>> abc/  
#显示404,因为有目录,但目录下没有入口文件  
/xxx >>> xxx/index.html  
#正常显示该网页,不通过" index.php "处理  
/home.html >>> home.html  
#正常显示该网页,不通过" index.php "处理  
/other >>> index.php?k=other  
#通过" index.php "处理  

效果展示

  • 显示首页

hovthen.com

  • 随机展示文章

hovthen.com/0

  • 跳转指定ID文章

hovthen.com/10

  • 关键词跳转指定链接

hovthen.com/test

后记

还有一个没弄,在线小白求大佬指点一二,等以后再补吧!

当前页面是本站的「Baidu MIP」版

请点击「完整版」查看或发表评论