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

redirecturl 是什么?
redirecturl 的字面意思是“重定向URL”,在织梦CMS中,它通常是一个表单隐藏字段,其值是一个URL地址,当表单被提交后,织梦的后台程序会读取这个字段的值,并将浏览器重定向到该URL。
最常见的应用场景就是登录成功后的跳转。
redirecturl 的主要应用场景
-
用户登录跳转
- 场景:用户访问一个需要登录才能看的页面(比如文章详情页、会员中心),系统会先跳转到登录页面,用户成功登录后,系统应该将他带回到他最初想访问的那个页面,而不是默认的会员首页。
- 实现:在登录页面,织梦会记录用户原始请求的URL,并将其作为
redirecturl的值,登录成功后,系统会检查这个字段,并跳转到该URL。
-
表单提交后跳转
(图片来源网络,侵删)- 场景:用户在前台提交一个反馈表单、一个报名表单或者一个评论,提交成功后,我们不希望停留在提交成功的空白页,而是希望跳转到“感谢页”、“首页”或者“列表页”。
- 实现:在处理表单提交的PHP文件中(如
feedback.php),开发者可以手动设置redirecturl的值,然后调用织梦的ShowMsg()函数来实现跳转。
-
权限验证后的跳转
- 场景:用户尝试访问一个需要特定权限(如VIP、付费)的内容,如果他没有权限,系统会提示他购买或升级,购买/升级成功后,应该自动刷新页面或跳转回刚才的内容页。
- 实现:与登录跳转类似,在权限验证失败并引导用户去操作时,将目标URL存入
redirecturl。
redirecturl 的工作原理(以登录为例)
-
发起请求:
- 用户访问一个需要登录的页面,
https://www.yoursite.com/a/123/456.html。 - 织梦的权限系统检测到用户未登录,于是将页面重定向到登录页面
https://www.yoursite.com/member/login.php,并在URL后面附加一个参数,如?gotopage=a/123/456.html。
- 用户访问一个需要登录的页面,
-
设置隐藏字段:
login.php接收到gotopage参数后,会在登录表单中生成一个隐藏的input字段。- 在页面的HTML源码中,你会看到类似这样的代码:
<input type="hidden" name="redirecturl" value="/a/123/456.html" />
- 这个
value就是用户最初想访问的页面。
-
提交表单:
(图片来源网络,侵删)- 用户输入用户名和密码,点击登录,表单被提交到
member/login.php。
- 用户输入用户名和密码,点击登录,表单被提交到
-
处理跳转:
login.php文件验证用户信息。- 如果登录成功:程序会检查
redirecturl这个字段是否存在,如果存在,就获取其值(/a/123/456.html),然后构造完整的URL(https://www.yoursite.com/a/123/456.html),最后执行页面跳转。 - 如果登录失败:
redirecturl会被忽略,并停留在登录页面并显示错误信息。
如何自定义或修改 redirecturl 的行为?
场景1:修改登录后的默认跳转地址
如果你不想让登录成功后跳转到 redirecturl 指定的页面,而是想固定跳转到会员中心首页,可以修改 member/login.php 文件。
-
打开
/member/login.php文件。 -
找到处理登录成功的逻辑,通常在
if($uid > 0)这个条件分支内。 -
你会看到类似
$dsql->Execute('me'...的一段代码,执行成功后会调用跳转函数。 -
找到类似这样的代码:
// 登录成功后的处理 if($uid > 0) { // ... 一些数据库操作 ... // 跳转逻辑 if(empty($redirecturl)) { $redirecturl = 'index.php'; } ShowMsg('成功登录,正在进入...',$redirecturl,0,1000); exit(); } -
修改方法:将
$redirecturl = 'index.php';这一行替换为你想要的任何地址,$redirecturl = 'my.php';(会员中心主页)。
场景2:在自定义表单中使用 redirecturl
假设你有一个自定义的反馈表单 feedback_form.htm,提交到 feedback.php,你希望提交成功后跳转到首页。
-
在模板文件
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>
-
-
在处理文件
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(); } ?>
- 在处理完表单数据(如插入数据库)后,使用织梦的
注意事项
-
安全性:
redirecturl的值来源于用户输入(无论是通过URL参数还是表单字段),所以存在安全风险,恶意用户可能会设置一个恶意的URL(如钓鱼网站),在使用redirecturl进行跳转前,最好对其进行验证和过滤,确保它是一个站内合法的URL。- 过滤示例:可以使用
preg_match()函数检查URL是否以你的域名开头,或者使用织梦自带的过滤函数,如RemoveXSS()。
- 过滤示例:可以使用
-
默认值:
redirecturl为空,一定要提供一个默认的跳转地址(如首页或会员中心),否则可能会导致页面无法跳转或跳转到错误页面。 -
用户体验:使用
ShowMsg()函数跳转时,会显示一个提示页面,并停留几秒,这比直接使用header('Location: ...')更友好,因为它能给用户一个明确的反馈。
redirecturl 是织梦CMS实现灵活、智能跳转的关键机制,它通过在表单中传递目标URL,使得系统可以根据不同的业务场景(如登录、提交表单、权限验证)将用户引导到最合适的页面,极大地提升了网站的可用性和用户体验,理解和掌握它的用法,对于二次开发和定制织梦网站非常重要。
