nginx如何配置织梦跳转代码?

99ANYc3cd6
预计阅读时长 24 分钟
位置: 首页 织梦建站 正文
  1. 强制 HTTPS 跳转:将所有 HTTP 请求自动跳转到 HTTPS,这是目前最基本的安全要求。
  2. 强制 WWW 跳转:将不带 www 的域名(如 yourdomain.com)跳转到带 www 的域名(如 www.yourdomain.com)。
  3. 强制非 WWW 跳转:与上面相反,将带 www 的域名跳转到不带 www 的域名。
  4. HTTP 跳转至 HTTPS 并同时处理 WWW:这是最完整和推荐的配置,兼顾了安全和域名统一。

下面我将分别给出这几种情况的 Nginx 配置代码,并提供详细的解释。

nginx怎么写织梦跳转代码
(图片来源网络,侵删)

重要前提:配置文件位置

在修改 Nginx 配置之前,请先找到你的网站配置文件,它通常位于:

  • /etc/nginx/sites-available/ 目录下
  • 或者 /usr/local/nginx/conf/vhost/ 目录下(如果你是编译安装的 Nginx)

你的网站配置文件可能类似于 yourdomain.com.confdefault,使用 sudo vimnano 等命令编辑它。

# 示例:编辑你的网站配置文件
sudo vim /etc/nginx/sites-available/yourdomain.com.conf

强制 HTTP 跳转至 HTTPS(最基础)

这是所有网站都应该做的第一步,确保所有流量都通过加密的 HTTPS 连接。

Nginx 配置代码:

nginx怎么写织梦跳转代码
(图片来源网络,侵删)
# 在你的 server 块内部添加以下代码
# 这个 server 块专门处理 HTTP 请求,并将其重定向到 HTTPS
server {
    listen 80;
    server_name yourdomain.com www.yourdomain.com; # 替换成你的域名
    # 将所有 HTTP 请求永久重定向到 HTTPS
    # 301 是永久重定向,对 SEO 有利
    return 301 https://$host$request_uri;
}
# 下面是正常的 HTTPS server 块
server {
    listen 443 ssl http2;
    server_name yourdomain.com www.yourdomain.com;
    # SSL 证书配置(必须)
    ssl_certificate /path/to/your/fullchain.pem; # 替换成你的证书路径
    ssl_certificate_key /path/to/your/privkey.pem; # 替换成你的私钥路径
    # ... 其他配置,如网站根目录、index 文件等 ...
    root /var/www/yourdomain.com;
    index index.php index.html index.htm;
    # ... 其他织梦相关配置 ...
}

代码解释:

  • listen 80;:监听 80 端口,即 HTTP 请求。
  • server_name ...;:指定需要处理的域名。
  • return 301 ...;:执行一个永久重定向(HTTP 301状态码)。
  • https://$host$request_uri;
    • $host:变量,表示请求的域名主机名(yourdomain.comwww.yourdomain.com),它会保留原始域名,不会自动添加 www
    • $request_uri:变量,表示完整的请求路径和参数(/about.html?id=1)。
    • 这行代码的意思是:“将所有访问 http://yourdomain.com/anything 的请求,永久跳转到 https://yourdomain.com/anything”。

强制 WWW 跳转(HTTP 和 HTTPS 都处理)

如果你希望用户只能通过 www.yourdomain.com 访问你的网站,可以使用这个配置。

Nginx 配置代码:

# 这个 server 块处理不带 www 的 HTTP 请求
server {
    listen 80;
    server_name yourdomain.com; # 只匹配不带 www 的域名
    return 301 https://www.$host$request_uri;
}
# 这个 server 块处理不带 www 的 HTTPS 请求
server {
    listen 443 ssl http2;
    server_name yourdomain.com; # 只匹配不带 www 的域名
    ssl_certificate /path/to/your/fullchain.pem;
    ssl_certificate_key /path/to/your/privkey.pem;
    return 301 https://www.$host$request_uri;
}
# 这是主 server 块,处理所有带 www 的请求
server {
    listen 443 ssl http2;
    server_name www.yourdomain.com; # 只匹配带 www 的域名
    ssl_certificate /path/to/your/fullchain.pem;
    ssl_certificate_key /path/to/your/privkey.pem;
    # ... 你的网站主配置 ...
    root /var/www/yourdomain.com;
    index index.php index.html index.htm;
    # ... 其他织梦相关配置 ...
}

代码解释:

nginx怎么写织梦跳转代码
(图片来源网络,侵删)
  • 我们创建了三个 server 块来处理所有可能性。
  • 第一个块:http://yourdomain.com -> https://www.yourdomain.com
  • 第二个块:https://yourdomain.com -> https://www.yourdomain.com
  • 第三个块:真正的网站配置,只处理 https://www.yourdomain.com 的请求。

强制非 WWW 跳转(HTTP 和 HTTPS 都处理)

与场景二相反,如果你希望用户只能通过 yourdomain.com 访问你的网站。

Nginx 配置代码:

# 这个 server 块处理带 www 的 HTTP 请求
server {
    listen 80;
    server_name www.yourdomain.com; # 只匹配带 www 的域名
    return 301 https://$host$request_uri;
}
# 这个 server 块处理带 www 的 HTTPS 请求
server {
    listen 443 ssl http2;
    server_name www.yourdomain.com; # 只匹配带 www 的域名
    ssl_certificate /path/to/your/fullchain.pem;
    ssl_certificate_key /path/to/your/privkey.pem;
    return 301 https://$host$request_uri;
}
# 这是主 server 块,处理所有不带 www 的请求
server {
    listen 443 ssl http2;
    server_name yourdomain.com; # 只匹配不带 www 的域名
    ssl_certificate /path/to/your/fullchain.pem;
    ssl_certificate_key /path/to/your/privkey.pem;
    # ... 你的网站主配置 ...
    root /var/www/yourdomain.com;
    index index.php index.html index.htm;
    # ... 其他织梦相关配置 ...
}

代码解释:

  • 第一个块:http://www.yourdomain.com -> https://yourdomain.com
  • 第二个块:https://www.yourdomain.com -> https://yourdomain.com
  • 第三个块:真正的网站配置,只处理 https://yourdomain.com 的请求。

完整推荐配置(HTTP -> HTTPS + 非 WWW -> WWW)

这是目前最主流、最推荐的配置,它同时解决了安全和域名统一的问题。

Nginx 配置代码:

# 1. 处理所有 HTTP 请求,并重定向到带 www 的 HTTPS
server {
    listen 80;
    server_name yourdomain.com www.yourdomain.com;
    return 301 https://www.$host$request_uri;
}
# 2. 处理所有 HTTPS 请求,并将非 www 域名重定向到 www
server {
    listen 443 ssl http2;
    server_name yourdomain.com;
    ssl_certificate /path/to/your/fullchain.pem;
    ssl_certificate_key /path/to/your/privkey.pem;
    # 将非 www 的 HTTPS 请求重定向到 www
    return 301 https://www.$host$request_uri;
}
# 3. 主服务器,处理所有带 www 的 HTTPS 请求
server {
    listen 443 ssl http2;
    server_name www.yourdomain.com;
    # SSL 优化配置(推荐)
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';
    ssl_prefer_server_ciphers off;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    # 你的网站根目录和首页
    root /var/www/yourdomain.com;
    index index.php index.html index.htm;
    # 织梦 CMS 伪静态规则(非常重要!)
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    # 处理织梦后台管理目录的伪静态(如果你的后台目录不是默认的 dede)
    # location /dede/ {
    #    try_files $uri $uri/ /dede/index.php?$query_string;
    # }
    # 禁止访问 .htaccess 文件(如果服务器是 Apache 和 Nginx 共存)
    location ~ /\.ht {
        deny all;
    }
    # PHP 配置
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; # 根据你的 PHP 版本修改
    }
    # 其他配置...
}

织梦(DedeCMS)的额外重要配置:伪静态

除了域名跳转,为了让织梦的 URL 伪静态(如 /a/2025/1234.html)正常工作,你必须在 Nginx 配置中添加正确的伪静态规则,上面的“完整推荐配置”中已经包含了它。

核心伪静态规则:

location / {
    try_files $uri $uri/ /index.php?$query_string;
}

作用: 当 Nginx 收到一个请求时,它会按顺序尝试:

  1. try_files $uri:直接访问请求的文件。
  2. try_files $uri/:如果请求的是一个目录,尝试访问目录下的 index 文件。
  3. /index.php?$query_string:如果以上都失败(例如访问了一个不存在的静态 HTML 文件),就将请求全部转发给 index.php 处理,并带上原始的查询字符串,这正是织梦伪静态的核心原理。

如何应用和测试配置

  1. 保存文件:保存你的 Nginx 配置文件。

  2. 检查语法:在修改配置后,务必先检查语法是否正确,避免 Nginx 启动失败。

    sudo nginx -t

    如果显示 syntax is oktest is successful,则说明语法正确。

  3. 重载 Nginx:如果语法正确,平滑地重载 Nginx 以应用新配置,这不会中断现有的连接。

    sudo systemctl reload nginx
    # 或者
    sudo nginx -s reload
  4. 测试:使用浏览器访问你的网站(http://yourdomain.com, http://www.yourdomain.com 等),观察地址栏是否按预期跳转,你也可以使用 curl 命令来检查 HTTP 状态码。

    # 检查 HTTP 是否跳转到 HTTPS
    curl -I http://yourdomain.com
    # 检查是否跳转到带 www 的域名
    curl -I http://yourdomain.com

通过以上步骤,你就可以为你的织梦网站配置好 Nginx 的跳转规则了。

-- 展开阅读全文 --
头像
织梦tagurl修改后404,如何解决?
« 上一篇 2025-12-21
织梦批量导入文章插件怎么用?
下一篇 » 2025-12-21

相关文章

取消
微信二维码
支付宝二维码

目录[+]