织梦redirecturl如何正确配置与使用?

99ANYc3cd6
预计阅读时长 16 分钟
位置: 首页 织梦建站 正文

redirecturl 是织梦CMS中一个非常核心和常用的功能,主要用于实现页面跳转,它可以在特定条件下,将用户从一个页面自动引导到另一个页面,这在很多场景下都非常有用。

织梦redirecturl
(图片来源网络,侵删)

redirecturl 是什么?

redirecturl 的字面意思是“重定向URL”,在织梦CMS中,它通常是一个表单隐藏字段,其值是一个URL地址,当表单被提交后,织梦的后台程序会读取这个字段的值,并将浏览器重定向到该URL。

最常见的应用场景就是登录成功后的跳转


redirecturl 的主要应用场景

  1. 用户登录跳转

    • 场景:用户访问一个需要登录才能看的页面(比如文章详情页、会员中心),系统会先跳转到登录页面,用户成功登录后,系统应该将他带回到他最初想访问的那个页面,而不是默认的会员首页。
    • 实现:在登录页面,织梦会记录用户原始请求的URL,并将其作为 redirecturl 的值,登录成功后,系统会检查这个字段,并跳转到该URL。
  2. 表单提交后跳转

    织梦redirecturl
    (图片来源网络,侵删)
    • 场景:用户在前台提交一个反馈表单、一个报名表单或者一个评论,提交成功后,我们不希望停留在提交成功的空白页,而是希望跳转到“感谢页”、“首页”或者“列表页”。
    • 实现:在处理表单提交的PHP文件中(如 feedback.php),开发者可以手动设置 redirecturl 的值,然后调用织梦的 ShowMsg() 函数来实现跳转。
  3. 权限验证后的跳转

    • 场景:用户尝试访问一个需要特定权限(如VIP、付费)的内容,如果他没有权限,系统会提示他购买或升级,购买/升级成功后,应该自动刷新页面或跳转回刚才的内容页。
    • 实现:与登录跳转类似,在权限验证失败并引导用户去操作时,将目标URL存入 redirecturl

redirecturl 的工作原理(以登录为例)

  1. 发起请求

    • 用户访问一个需要登录的页面,https://www.yoursite.com/a/123/456.html
    • 织梦的权限系统检测到用户未登录,于是将页面重定向到登录页面 https://www.yoursite.com/member/login.php,并在URL后面附加一个参数,如 ?gotopage=a/123/456.html
  2. 设置隐藏字段

    • login.php 接收到 gotopage 参数后,会在登录表单中生成一个隐藏的 input 字段。
    • 在页面的HTML源码中,你会看到类似这样的代码:
      <input type="hidden" name="redirecturl" value="/a/123/456.html" />
    • 这个 value 就是用户最初想访问的页面。
  3. 提交表单

    织梦redirecturl
    (图片来源网络,侵删)
    • 用户输入用户名和密码,点击登录,表单被提交到 member/login.php
  4. 处理跳转

    • login.php 文件验证用户信息。
    • 如果登录成功:程序会检查 redirecturl 这个字段是否存在,如果存在,就获取其值(/a/123/456.html),然后构造完整的URL(https://www.yoursite.com/a/123/456.html),最后执行页面跳转。
    • 如果登录失败redirecturl 会被忽略,并停留在登录页面并显示错误信息。

如何自定义或修改 redirecturl 的行为?

场景1:修改登录后的默认跳转地址

如果你不想让登录成功后跳转到 redirecturl 指定的页面,而是想固定跳转到会员中心首页,可以修改 member/login.php 文件。

  1. 打开 /member/login.php 文件。

  2. 找到处理登录成功的逻辑,通常在 if($uid > 0) 这个条件分支内。

  3. 你会看到类似 $dsql->Execute('me'... 的一段代码,执行成功后会调用跳转函数。

  4. 找到类似这样的代码:

    // 登录成功后的处理
    if($uid > 0)
    {
        // ... 一些数据库操作 ...
        // 跳转逻辑
        if(empty($redirecturl))
        {
            $redirecturl = 'index.php';
        }
        ShowMsg('成功登录,正在进入...',$redirecturl,0,1000);
        exit();
    }
  5. 修改方法:将 $redirecturl = 'index.php'; 这一行替换为你想要的任何地址,$redirecturl = 'my.php';(会员中心主页)。

场景2:在自定义表单中使用 redirecturl

假设你有一个自定义的反馈表单 feedback_form.htm,提交到 feedback.php,你希望提交成功后跳转到首页。

  1. 在模板文件 feedback_form.htm

    • 确保你的表单中有一个隐藏字段,用来接收跳转地址,这个值可以从URL参数中获取,或者写死。

      <form name="myform" action="/feedback.php" method="post">
      <!-- 你的其他表单字段,如姓名、邮箱、内容等 -->
      <!-- 关键:设置一个隐藏字段来传递跳转地址 -->
      <input type="hidden" name="redirecturl" value="{dede:global name='gotopage' function='RemoveXSS(@me)'/}" />
      <!-- 如果没有URL参数,可以给一个默认值 -->
      {dede:if empty('{dede:global name='gotopage'/}')}
      <script>
          document.getElementsByName('redirecturl')[0].value = '/';
      </script>
      {/dede:if}
      <button type="submit">提交反馈</button>
      </form>
  2. 在处理文件 feedback.php

    • 在处理完表单数据(如插入数据库)后,使用织梦的 ShowMsg() 函数进行跳转。
      <?php
      require_once(dirname(__FILE__)."/../include/common.inc.php");
      require_once(DEDEINC."/membermodel.class.php");

    // 1. 验证码等逻辑...

    // 2. 处理表单数据,例如插入到数据库 // $feedback = new membermodel(); // $row = array(); // $row['msg'] = $_POST['msg']; // $row['userid'] = $cfg_ml->M_ID; // $row['uname'] = $cfg_ml->M_UserName; // $feedback->SetTable('dede_feedback'); // $id = $feedback->AddItem($row);

    // 3. 使用 ShowMsg 进行跳转 if($id > 0) { // 获取表单中的 redirecturl 值 $goto = !empty($_POST['redirecturl']) ? $_POST['redirecturl'] : '/'; // 如果没有,默认跳转到首页

    // 显示成功消息并跳转
    ShowMsg('反馈提交成功,感谢您的参与!', $goto, 0, 3000);
    exit();

    } else { ShowMsg('反馈提交失败,请重试!', '-1', 0, 3000); exit(); } ?>


注意事项

  1. 安全性redirecturl 的值来源于用户输入(无论是通过URL参数还是表单字段),所以存在安全风险,恶意用户可能会设置一个恶意的URL(如钓鱼网站),在使用 redirecturl 进行跳转前,最好对其进行验证和过滤,确保它是一个站内合法的URL。

    • 过滤示例:可以使用 preg_match() 函数检查URL是否以你的域名开头,或者使用织梦自带的过滤函数,如 RemoveXSS()
  2. 默认值redirecturl 为空,一定要提供一个默认的跳转地址(如首页或会员中心),否则可能会导致页面无法跳转或跳转到错误页面。

  3. 用户体验:使用 ShowMsg() 函数跳转时,会显示一个提示页面,并停留几秒,这比直接使用 header('Location: ...') 更友好,因为它能给用户一个明确的反馈。

redirecturl 是织梦CMS实现灵活、智能跳转的关键机制,它通过在表单中传递目标URL,使得系统可以根据不同的业务场景(如登录、提交表单、权限验证)将用户引导到最合适的页面,极大地提升了网站的可用性和用户体验,理解和掌握它的用法,对于二次开发和定制织梦网站非常重要。

-- 展开阅读全文 --
头像
dede专题节点模板为何不显示?
« 上一篇 01-03
dede如何获取提交来源页面的链接?
下一篇 » 01-03

相关文章

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

目录[+]