如何实现url的重定向(域名跳转)

我想实现b.club跳转到b.com,怎么做?

修改nginx配置文件

以下是个示例文件,你可以根据自己的需求修改。

主要是return 301 https://$host$request_uri;这一行,其中https://是跳转到https,$host是原域名,$request_uri是原请求路径。

可以看到,所有b.club的请求都会被重定向到b.com

# HTTP 80端口的重定向
server {
    listen 80;
    server_name b.com www.b.com;
    # 所有 HTTP 请求重定向到 HTTPS
    return 301 https://$host$request_uri;
}

# 将 b.club 的 HTTP 请求重定向到 b.com
server {
    listen 80;
    server_name b.club www.b.club;
    return 301 https://b.com$request_uri;
}

# HTTPS 443端口的主站点配置 (b.com)
server {
    listen 443 ssl;
    server_tokens off;
    server_name b.com www.b.com;

    # SSL证书配置
    ssl_certificate /etc/letsencrypt/live/b.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/b.com/privkey.pem;

    include enable-php-74.conf;
    include /www/server/panel/vhost/rewrite/wordpress.local.conf;

    location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md) {
        return 404;
    }

    location ~ \.well-known {
        allow all;
    }

    access_log /www/wwwlogs/wordpress.local.log;
    error_log /www/wwwlogs/wordpress.local.error.log;
}

# HTTPS 443端口的 b.club 重定向到 b.com
server {
    listen 443 ssl;
    server_name b.club www.b.club;

    # SSL证书配置
    ssl_certificate /etc/letsencrypt/live/b.club/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/b.club/privkey.pem;

    # 所有 HTTPS 请求重定向到 b.com
    return 301 https://b.com$request_uri;
}

怎么找到nginx的配置文件-nginx.conf? 可以看我这篇文章: https://linxiaozhong.cn/nginx/

DNS解析

在域名解析中,将b.club的A记录指向服务器IP。

或者设置两条CNAME记录,b.club将@www结果指向b.com

为什么需要DNS解析?

DNS解析是将域名解析为IP地址的过程,这样浏览器才能找到服务器。 所以,访问服务器是第一步,之后才会进行执行重定向请求。

如何使用rust的引擎模版tera

tera是什么

tera是一个用于渲染模板的引擎,类似于jinja2。它可以使用rust语言编写html模版,然后渲染成正式的html文件。

而jinjia2是python的模板引擎,可以使用python语言渲染html模版。

好处是,可以在html中使用rust的语法,比如if else,for循环等。

新建一个rust项目

cargo new tera-demo
cd tera-demo

添加tera依赖

在Cargo.toml中添加tera依赖:

[dependencies]
tera = "1.20.0"
actix-web = "4.4.0"

actix-web是为了可以在浏览器中实时查看渲染后的html文件。

创建一个html模版

在根目录下新建一个templates目录,然后新建一个hello.html文件:

<h1>虽然,非常开心, 你好, {{ name }}!</h1>

修改main.rs文件

在src目录下新建一个main.rs文件,然后添加以下代码:

use actix_web::{get, App, HttpResponse, HttpServer, Responder};
use tera::Tera;
use std::sync::Mutex;

struct AppState {
    tera: Mutex<Tera>,
}

#[get("/")]
async fn index(data: actix_web::web::Data<AppState>) -> impl Responder {
    let tera = data.tera.lock().unwrap();
    let mut context = tera::Context::new();
    context.insert("name", "世界");

    match tera.render("hello.html", &context) {
        Ok(rendered) => HttpResponse::Ok()
            .content_type("text/html; charset=utf-8")
            .body(rendered),
        Err(e) => HttpResponse::InternalServerError().body(format!("Rendering error: {}", e)),
    }
}

#[actix_web::main]
async fn main() -> std::io::Result<()> {
    let tera = match Tera::new("templates/**/*") {
        Ok(t) => t,
        Err(e) => {
            println!("Parsing error(s): {}", e);
            std::process::exit(1);
        }
    };

    println!("Server running at http://localhost:8080");

    HttpServer::new(move || {
        App::new()
            .app_data(actix_web::web::Data::new(AppState {
                tera: Mutex::new(tera.clone()),
            }))
            .service(index)
    })
    .bind("127.0.0.1:8080")?
    .run()
    .await
}

安装cargo-watch

cargo install cargo-watch

运行项目

cargo watch -x run

现在,打开浏览器,输入http://localhost:8080,就可以看到渲染后的html文件了。

注意,更新代码后浏览器并不会自动刷新,需要手动刷新。