这里为您提供几种常见的实现方法,请根据您的需求选择,并务必在修改前备份原文件,以防万一。

完全禁止未登录用户访问前台(最严格)
这种方法会强制所有访问网站的访客(除了管理员)跳转到登录页面或指定页面。
实现原理: 在网站入口文件 index.php 中添加判断逻辑,检查用户的登录状态,如果未登录,则直接跳转。
操作步骤:
-
备份文件:
(图片来源网络,侵删)- 备份您网站根目录下的
index.php文件。 - 备份
/include/helpers/extend.helper.php文件(这个文件通常用来存放自定义的函数)。
- 备份您网站根目录下的
-
创建一个自定义函数(可选,但推荐):
- 打开
/include/helpers/extend.helper.php文件。 - 在文件末尾
?>之前,添加以下代码:// 检查用户是否已登录 if (!defined('DEDERLAND')) { function check_user_login() { global $dsql; // 检查全局变量 $cfg_ml 是否存在,它代表了会员登录类 if ($cfg_ml) { // $cfg_ml->M_ID > 0,表示已登录 if ($cfg_ml->M_ID > 0) { return true; } } // 如果未登录,返回 false return false; } }这个函数
check_user_login()会帮助我们检查用户是否登录。
- 打开
-
修改入口文件
index.php:- 打开网站根目录下的
index.php文件。 - 找到类似
require_once(dirname(__FILE__)."/include/common.inc.php");的代码行。 - 在这行代码的下面,添加以下判断逻辑:
// 在 require_once("include/common.inc.php"); 之后添加
// 1. 引入我们刚刚创建的自定义函数(如果创建了的话) // require_once(DEDEINC."/helpers/extend.helper.php");
(图片来源网络,侵删)// 2. 检查用户登录状态 if ($cfg_ml->M_ID == 0) { // 如果用户未登录,则跳转到登录页面 // 你可以把 /member/index.php 换成你想要的任何页面,比如一个提示页面 header("Location: /member/index.php?gotopage=".urlencode('http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'])); exit(); }
**代码解释:** * `$cfg_ml->M_ID == 0`:这是判断用户是否已登录的核心,`$cfg_ml` 是织梦的会员登录对象,`M_ID` 是其用户ID,如果为0,表示未登录。 * `header("Location: ...")`:这是PHP的页面跳转函数。 * `/member/index.php`:这是织梦默认的会员登录页面,你可以修改成任何你想要的URL,`/login-tips.html`(一个自定义的提示页面)。 * `urlencode('http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'])`:这一句的作用是,在用户跳转到登录页后,登录成功可以自动跳转回他最初想访问的页面,这是一种很好的用户体验。 - 打开网站根目录下的
-
完成:
- 保存
index.php和extend.helper.php文件。 - 任何未登录的用户访问您的网站首页或任何由
index.php驱动的页面(包括栏目页、文章页等),都会被强制跳转到登录页面。
- 保存
仅禁止访问特定栏目(更灵活)
如果您只想禁止访客访问某些特定的栏目(会员资源”、“下载中心”等),而其他栏目可以正常浏览,可以使用此方法。
实现原理: 在栏目的列表模板(list_article.htm)和文章内容模板(article_article.htm)中,通过PHP代码判断当前访问者是否登录。
操作步骤:
-
备份模板文件:
- 备份
/templets/default/list_article.htm(或您正在使用的栏目列表模板)。 - 备份
/templets/default/article_article.htm(或您正在使用的文章内容模板)。
- 备份
-
修改列表模板
list_article.htm:- 在模板文件的开头,
<html>标签之前,添加PHP判断代码:[field:global name=autoindex runphp="yes"] if(@me == 1) { // 只在第一个循环时执行一次判断,避免重复判断 global $cfg_ml; if($cfg_ml->M_ID == 0) { // 如果未登录,显示提示信息并停止执行后续模板 @me = '<div style="text-align:center; padding:50px 0;"> <h2>该栏目仅对会员开放</h2> <p>请<a href="/member/index.php">登录</a>后访问。</p> </div>'; } else { // 如果已登录,则正常显示模板内容 @me = ''; } } else { @me = ''; } [/field:global]代码解释:
[field:global name=autoindex runphp="yes"]:这是一个织梦的全局变量,用于循环计数,我们利用它只在第一个循环时执行判断,提高效率。if($cfg_ml->M_ID == 0):判断是否登录。@me = '...':如果未登录,就将整个模板的输出内容替换为一段提示文字。
- 在模板文件的开头,
-
修改文章内容模板
article_article.htm:- 同样,在模板文件的开头,
<html>标签之前,添加类似的判断代码:[field:global name=autoindex runphp="yes"] if(@me == 1) { global $cfg_ml; if($cfg_ml->M_ID == 0) { // 如果未登录,显示提示信息 @me = '<div style="text-align:center; padding:50px 0;"> <h2>该内容仅对会员开放</h2> <p>请<a href="/member/index.php">登录</a>后查看。</p> </div>'; } else { @me = ''; } } else { @me = ''; } [/field:global]
- 同样,在模板文件的开头,
-
完成:
- 保存模板文件。
- 只有您设置了这些模板的栏目,才会进行登录验证,其他未修改的栏目则不受影响。
通过后台设置(推荐,但有限制)
织梦后台本身没有直接“关闭前台”的开关,但可以通过设置会员模型来实现部分限制。
适用场景: 您希望将整个网站或部分内容设置为“会员专享”,并让用户在前台通过注册登录后才能查看。
操作步骤:
-
进入会员模型管理:
- 登录织梦后台。
- 菜单栏:
会员->会员模型管理。
-
修改或创建模型:
- 如果您想限制文章,点击
普通文章。 - 如果您想限制其他类型,可以创建或修改相应的模型。
- 在模型字段设置页面,找到
浏览权限或类似的字段(通常是系统自带的arcrank字段)。
- 如果您想限制文章,点击
-
设置浏览权限:
- 找到
arcrank字段,将其设置为“仅会员可见”或类似的选项,这个字段的值有:-1: 专题0: 公开(所有人可见)1: 秘密(仅管理员可见)2: 会员(仅注册会员可见)
- 您可以将默认值设置为
2,这样,所有新发布的文章默认就只有会员能看。
- 找到
-
发布文章时设置:
- 在后台发布文章时,您也可以手动修改
浏览权限这一项,来控制单篇文章的可见性。
- 在后台发布文章时,您也可以手动修改
优点:
- 无需修改代码,安全,后台可管理。
- 灵活,可以精确控制每篇文章的浏览权限。
缺点:
- 无法完全禁止访问网站首页和栏目页,访客仍然可以浏览到文章列表,只是点击进去会提示权限不足。
- 对于想完全“锁站”的场景不适用。
总结与建议
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
方法一 (修改index.php) |
彻底、严格,完全禁止未登录用户访问任何页面。 | 修改核心文件,有风险;对SEO不友好(搜索引擎也无法抓取)。 | 内部网站、测试环境、需要完全会员制的网站。 |
| 方法二 (修改模板) | 灵活,可以针对特定栏目进行控制,不影响其他页面。 | 需要为每个需要限制的模板单独修改,略显繁琐。 | 网站大部分公开,只有少数几个栏目或内容需要会员权限。 |
| 方法三 (后台设置) | 安全、方便,后台可视化操作,无需编程。 | 不够彻底,访客仍可看到文章列表,无法锁站。 | 大多数会员制网站,希望内容对搜索引擎部分开放。 |
强烈建议:
- 如果您是新手,优先尝试方法三,它最安全。
- 如果您需要彻底禁止所有访客访问,选择方法一,但操作前务必、务必、务必备份文件。
- 如果您只需要限制部分内容,方法二是最佳选择。
