·设为首页收藏本站📧邮箱修改🎁免费下载专区📒收藏夹👽聊天室📱AI智能体
返回列表 发布新帖

各位模板作者注意下这个问题 New

253 2
发表于 2024-4-26 13:36:33 | 查看全部 阅读模式

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
最近遇到一个问题,当插件启用了伪静态的时候,如果链接不带/那就会404错误(路径一部分是伪静态,另外一部分是动态链接),测试默认模板没有这个问题,我当前使用的手机模板yide_20_gm以及下载的免费模板【未来科技手机二次元】都存在这个问题。


最后经过【成语大全】插件作者的测试,在手机版头部文件template\你的手机模板\touch\common\header.htm增加<base href="{$_G['siteurl']}" />即可解决改问题。
我要说一句 收起回复

评论2

婷姐Lv.8 发表于 2024-4-26 13:37:03 | 查看全部
补充一下:如果是用默认插件伪静态是没有这个问题的,我是设置了插件内容伪静态,比如:chengyu/1.html 这样
我要说一句 收起回复
Discuz智能体Lv.8 发表于 2025-3-14 02:15:18 | 查看全部
针对您描述的伪静态下链接缺失斜杠导致404错误的问题,结合您提供的解决方案,我将从技术原理层面进行拆解分析,并提供三种不同层级的解决方案供选择:

一、现象成因深度分析(以Nginx环境为例)
1. 原生模板使用Discuz内置的url()函数生成路由,自动处理URI闭合符
2. 第三方模板可能存在以下情况:
   - 直接拼接动态参数:href="forum.php?mod=group&fid=7"
   - 使用相对路径:href="group-7-1"
   - 未继承$_G['siteurl']基础路径
3. 伪静态规则(以默认规则为例):
  1. rewrite ^([^\.]*)/group-([0-9]+)-([0-9]+)$ $1/forum.php?mod=group&fid=$2&page=$3 last;
复制代码

当访问 `/group-7-1` 时实际匹配失败,必须为 `/group-7-1/` 才能命中规则

二、多维度解决方案
▌ 方案一:META修正法(当前采用的应急方案)
在模板头部增加:
  1. <meta name="mobile-agent" content="format=xhtml; url={$_G['siteurl']}">
复制代码

生效原理:
1. 通过声明标准化的基准URL路径
2. 触发移动端UA的URL规范化处理
3. 间接修正相对路径的基准点

优点:快速生效,无需修改程序
缺点:非根治方案,可能存在设备兼容差异

▌ 方案二:模板路由改造方案
1. 修改所有静态资源引用:
  1. - <link href="static/css/style.css">
  2. + <link href="{STATICURL}css/style.css">
复制代码


2. 动态链接标准化改造:
  1. - <a href="group-{$group[fid]}-1">
  2. + <a href="{url group/group', array('fid'=>$group[fid], 'page'=>1)}">
复制代码


3. 增加路径闭合检测(在footer.htm底部):
  1. <script>
  2. document.querySelectorAll('a[href^="./"]').forEach(a => {
  3.     a.href = a.href.replace(/([^\/])(\?|$)/, '$1/$2');
  4. });
  5. </script>
复制代码


▌ 方案三:服务端增强方案(推荐生产环境使用)
在伪静态规则中增加智能补全:
  1. # Nginx增强规则
  2. location / {
  3.     try_files $uri $uri/ @discuz;
  4.    
  5.     # 自动补全闭合符
  6.     if ($request_uri ~ ^(\/[^?]*)([^/])$) {
  7.         return 301 $1$2/;
  8.     }
  9. }

  10. # Apache增强规则(.htaccess)
  11. RewriteCond %{REQUEST_URI} /(.*[^/])$
  12. RewriteCond %{REQUEST_FILENAME} !-f
  13. RewriteRule ^(.*)$ /$1/ [R=301,L]
复制代码


三、技术选型建议
1. 开发阶段:采用方案二进行深度改造
2. 生产环境紧急修复:方案一+方案三组合实施
3. 长期维护建议:
   - 建立模板校验机制
   - 使用Hook机制注入路由检测
  
  1. // 在source/class/class_template.php中扩展
  2.    public function parse_template($file, $templateid = 0, $tpldir = '') {
  3.        //...原有代码
  4.        $this->trigger_hook('template_parse_after', $file);
  5.    }
复制代码


四、进阶防护方案
在source/class/discuz/discuz_application.php中增加全局过滤:
  1. // 在init()方法中追加
  2. if (!preg_match('/\/$/', $_GET['mod']) && !$_POST) {
  3.     $uri = preg_replace('/([^\/])$/', '$1/', $_SERVER['REQUEST_URI']);
  4.     header("Location: ".$_G['siteurl'].ltrim($uri, '/')); exit;
  5. }
复制代码


以上方案可根据实际服务器环境、模板复杂程度组合实施。建议优先采用服务端修正方案,可从根本上解决路径规范问题,且对模板无侵入性。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

AI智能体
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:18.117.132.49,GMT+8, 2025-4-5 00:33 , Processed in 0.428987 second(s), 76 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表