迪巴拉 发表于 2020-8-26 12:16:04

discuz伪静态出错404 ,自动跳转成了静态+动态网址

设置的目录式的伪静态,但是偶尔打开链接会形成以下形式,请问如何处理呢?
https://www.xxxx.cn/seoarticle/20239/1/forum.php?mod=viewthread&tid=20239

独家记忆 发表于 2020-8-26 12:16:51

Discuz!自身不带此功能的伪静态地址,建议咨询相关实现代码的作者

Discuz智能体 发表于 2025-3-19 10:04:54

根据你描述的问题,Discuz伪静态规则配置可能存在问题,导致部分链接未能正确重写为伪静态形式,而是保留了动态参数(如`forum.php?mod=viewthread&tid=20239`)。以下是解决该问题的步骤:

---

### 1. **检查伪静态规则是否正确**
   - 确保你在Discuz后台的伪静态规则配置与服务器(如Nginx、Apache)的规则一致。
   - 以Nginx为例,伪静态规则通常如下:
   rewrite ^([^\.]*)/topic-(.+)\.html$ $1/portal.php?mod=topic&topic=$2 last;
   rewrite ^([^\.]*)/article-(+)-(+)\.html$ $1/portal.php?mod=view&aid=$2&page=$3 last;
   rewrite ^([^\.]*)/forum-(\w+)-(+)\.html$ $1/forum.php?mod=forumdisplay&fid=$2&page=$3 last;
   rewrite ^([^\.]*)/thread-(+)-(+)-(+)\.html$ $1/forum.php?mod=viewthread&tid=$2&extra=page%3D$4&page=$3 last;
   rewrite ^([^\.]*)/group-(+)-(+)\.html$ $1/forum.php?mod=group&fid=$2&page=$3 last;
   rewrite ^([^\.]*)/space-(username|uid)-(.+)\.html$ $1/home.php?mod=space&$2=$3 last;
   rewrite ^([^\.]*)/blog-(+)-(+)\.html$ $1/home.php?mod=space&uid=$2&do=blog&id=$3 last;
   rewrite ^([^\.]*)/(fid|tid)-(+)\.html$ $1/index.php?action=$2&value=$3 last;
   - 如果你使用的是Apache,确保`.htaccess`文件中的规则与Discuz后台的伪静态规则一致。

---

### 2. **检查Discuz后台伪静态设置**
   - 登录Discuz后台,进入 **全局 > SEO设置 > URL静态化**。
   - 确保你选择的伪静态规则与服务器配置的规则一致。
   - 如果是目录式伪静态,确保规则中包含了目录路径(如`seoarticle`)。

---

### 3. **检查链接生成逻辑**
   - 如果部分链接仍然生成了动态形式,可能是模板或插件中直接使用了动态链接。
   - 检查模板文件(如`template/default/forum/viewthread.htm`)中是否有硬编码的动态链接(如`forum.php?mod=viewthread&tid=xxx`)。
   - 如果有,将其替换为伪静态链接生成函数,例如:
   <a href="forum.php?mod=viewthread&tid={$thread}">...</a>
   替换为:
   <a href="{forum url('forum.php?mod=viewthread&tid='.$thread['tid'])}">...</a>

---

### 4. **清除缓存**
   - 清除Discuz的缓存(后台 **工具 > 更新缓存**)。
   - 如果使用了CDN或浏览器缓存,请确保刷新CDN缓存或清除浏览器缓存。

---

### 5. **检查插件或自定义代码**
   - 如果你安装了第三方插件或自定义了代码,检查是否有插件或代码直接生成了动态链接。
   - 如果有,修改插件或代码,使用Discuz的伪静态链接生成函数。

---

### 6. **测试伪静态规则**
   - 使用工具(如在线伪静态测试工具)测试你的伪静态规则,确保规则能够正确匹配和重写链接。

---

### 7. **服务器日志分析**
   - 如果问题仍然存在,查看服务器的错误日志(如Nginx的`error.log`或Apache的`error_log`),检查是否有404错误或其他相关错误信息。
   - 根据日志中的错误信息调整伪静态规则。

---

### 8. **示例:目录式伪静态规则**
   如果你使用的是目录式伪静态,确保规则中包含目录路径。例如:
   rewrite ^/seoarticle/(+)/(+)/forum.php$ /seoarticle/$1/$2/forum.php last;
   rewrite ^/seoarticle/(+)/(+)/thread-(+)-(+)-(+)\.html$ /seoarticle/$1/$2/forum.php?mod=viewthread&tid=$3&extra=page%3D$5&page=$4 last;

---

通过以上步骤,你应该能够解决Discuz伪静态出错404的问题。如果问题仍然存在,可以提供更多详细信息(如服务器类型、伪静态规则等),我将进一步协助你排查问题。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页: [1]
查看完整版本: discuz伪静态出错404 ,自动跳转成了静态+动态网址