寻求帮助:关于外网访问moodle的问题

寻求帮助:关于外网访问moodle的问题

tiger zhu發表於
Number of replies: 11
我校的moodle可以在内网访问,一切正常。

现在config.php 文件内容为 $CFG->wwwroot = 'http:/ 内网IP地址/moodle',现在想要在外网访问,并且这个原来的内网IP192.168.0.100已经映射到外网IP 201.....。现在是否只要将 config.php 文件中的 wwwroot = 'http:/ 内网IP地址/moodle'改为相应的外网IP地址就可以了。如果这样改后,在学校内部还可以用原来的内网ip访问吗?谢谢大家给我个答复。

評比平均分數: -
In reply to tiger zhu

回复: 寻求帮助:关于外网访问moodle的问题

nm l發表於

可以。我这里就是这样做的。

In reply to tiger zhu

回复: 寻求帮助:关于外网访问moodle的问题

民华 杨發表於

这个问题一个困扰着我,不知有没有完美的解决办法。

安装moodle时你用的什么地址,访问时似乎也只能用什么地址来访问。所以只好我内网使用时,在config.php里改为内网的地址,在外网访问时,再改成外网的地址。很不方便。而同在一个服务器的数据库下安装的discuz论坛却无此麻烦。只要安装好,无论用内网地址,还是用外网地址访问都非常方便。

就是在内网使用时还有如下问题:你在服务器如果用http://localhost/moodle安装好,而在其它客户机上用http://该服务器的IP/moodle可以访问到首页,但你登录或访问moodle上的其它页面时,地址仍是http://localhost/moodle/login.php,所有你非得用http://该服务器的IP/moodle安装才行。

我想问的问题是,对于config.php的"$CFG->wwwroot ="地址字符串是否可添加多个?如何添加?

谢谢各位。

In reply to 民华 杨

回复: 寻求帮助:关于外网访问moodle的问题

kevin huang發表於

大家好,我是个学生,现在用实验室的内网做服务器,需要外网访问,做完映射后,修改完config.php的"$CFG->wwwroot ="http://映射的ip/moodle/",现在外网可以访问,内网却出错访问不了,有什么解决方法吗?

In reply to kevin huang

回复: 寻求帮助:关于外网访问moodle的问题

kevin huang發表於

刚刚找到解决方法,根据内外网地址修改$CFG->wwwroot =的值;代码如下:

<?php


unset($CFG);

function _get_client_ip()//取得代理的IP等
{
  if(getenv('HTTP_CLIENT_IP'))
  {
    $client_ip = getenv('HTTP_CLIENT_IP');
  } elseif(getenv('HTTP_X_FORWARDED_FOR'))
  {
    $client_ip = getenv('HTTP_X_FORWARDED_FOR');
  } elseif(getenv('REMOTE_ADDR'))
  {
    $client_ip = getenv('REMOTE_ADDR');
  } else
  {
    $client_ip = $HTTP_SERVER_VARS['REMOTE_ADDR'];
  }
  Return  $client_ip;
}
function Is_Network()//判断是否为内网network 或 Net foreign
{
  $b=0;
  $c_ip=_get_client_ip();
  $c_ip=substr($c_ip,0,3);
  if (($c_ip=="192")||($c_ip=="127"))//这里添加内网段  {
  $b=1;//内网
  }
  Return $b;
}


$CFG->dbtype    = 'mysql';
$CFG->dbhost    = 'localhost';
$CFG->dbname    = 'moodle';
$CFG->dbuser    = 'root';
$CFG->dbpass    = 'bysj123';
$CFG->dbpersist =  false;
$CFG->prefix    = 'mdl_';

if (Is_Network()==0) {
$CFG->wwwroot   = '  ';//外网地址的ip
} else {
$CFG->wwwroot   = '' ;//内网ip
}

$CFG->dirroot   = 'E:\AppServ\www\moodle';
$CFG->dataroot  = 'E:\AppServ/moodledata';
$CFG->admin     = 'admin';

$CFG->directorypermissions = 00777;  // try 02777 on a server in Safe Mode

$CFG->unicodedb = true;  // Database is utf8

$CFG->unicodecleanfilename = true; // Allow upload with Chinese filename

require_once("$CFG->dirroot/lib/setup.php");
// MAKE SURE WHEN YOU EDIT THIS FILE THAT THERE ARE NO SPACES, BLANK LINES,
// RETURNS, OR ANYTHING ELSE AFTER THE TWO CHARACTERS ON THE NEXT LINE.
?>

In reply to kevin huang

回复: 寻求帮助:关于外网访问moodle的问题

kevin huang發表於

刚刚找到解决方法,根据内外网地址修改$CFG->wwwroot =的值;代码如下:

<?php


unset($CFG);

function _get_client_ip()//取得代理的IP等
{
  if(getenv('HTTP_CLIENT_IP'))
  {
    $client_ip = getenv('HTTP_CLIENT_IP');
  } elseif(getenv('HTTP_X_FORWARDED_FOR'))
  {
    $client_ip = getenv('HTTP_X_FORWARDED_FOR');
  } elseif(getenv('REMOTE_ADDR'))
  {
    $client_ip = getenv('REMOTE_ADDR');
  } else
  {
    $client_ip = $HTTP_SERVER_VARS['REMOTE_ADDR'];
  }
  Return  $client_ip;
}
function Is_Network()//判断是否为内网network 或 Net foreign
{
  $b=0;
  $c_ip=_get_client_ip();
  $c_ip=substr($c_ip,0,3);
  if (($c_ip=="192")||($c_ip=="127"))//这里添加内网段  {
  $b=1;//内网
  }
  Return $b;
}


$CFG->dbtype    = 'mysql';
$CFG->dbhost    = 'localhost';
$CFG->dbname    = 'moodle';
$CFG->dbuser    = 'root';
$CFG->dbpass    = 'bysj123';
$CFG->dbpersist =  false;
$CFG->prefix    = 'mdl_';

if (Is_Network()==0) {
$CFG->wwwroot   = '  ';//外网地址的ip
} else {
$CFG->wwwroot   = '' ;//内网ip
}

$CFG->dirroot   = 'E:\AppServ\www\moodle';
$CFG->dataroot  = 'E:\AppServ/moodledata';
$CFG->admin     = 'admin';

$CFG->directorypermissions = 00777;  // try 02777 on a server in Safe Mode

$CFG->unicodedb = true;  // Database is utf8

$CFG->unicodecleanfilename = true; // Allow upload with Chinese filename

require_once("$CFG->dirroot/lib/setup.php");
// MAKE SURE WHEN YOU EDIT THIS FILE THAT THERE ARE NO SPACES, BLANK LINES,
// RETURNS, OR ANYTHING ELSE AFTER THE TWO CHARACTERS ON THE NEXT LINE.
?>

In reply to kevin huang

回复: 寻求帮助:关于外网访问moodle的问题

民华 杨發表於

谢谢好学的kevin huang

的确解决了问题

In reply to 民华 杨

回复: 寻求帮助:关于外网访问moodle的问题

老师 yang發表於

内网外网访问还是存在问题,其实还是没有从根本上解决问题,因为课程中的图片使用的是绝对地址,例如:,如果你做课程是资源是内网上传的,那么图片的地址就显示“”,如果你利用外网映射访问,图片是显示不了的。

如何解决moodle的绝对地址,才是根本所在!!望高手能够解答

In reply to kevin huang

回复: 寻求帮助:关于外网访问moodle的问题

yejin yn發表於
看了Kevin huang 的贴子收获很大,已经解决了内外网访问的问题。但是各个资源中的图片或链接还是有问题,即还是用建立资源时的绝对路径,因此内网建立的资源中的图片在外网访问时仍不正常,反之,外网建立的资源也有同样的问题。各位大侠有什么更好的方法可以解决吗?谢谢。
In reply to tiger zhu

回复: 寻求帮助:关于外网访问moodle的问题

ding alen發表於

我的经验是在公网上注册一个域名(例如www.abc.cn),进行泛名解析(*.abc.cn)指向公网IP,然后将在学校内部用ISA发布moodle。公共名称为moodle.abc.cn,IP指向内网moodle服务器的IP。在校内做DNS(可以做在ISA服务器上),将moodle.abc.cn解析到内网IP。在Moodle系统中用域名进行配置,$CFG->wwwroot = 'http://moodle.abc.cn' 。一切OK!

请访问上海市三林中学的仰高课程学习平台。http://moodle.shslzx.cn

这个方案,我在浦东的几个项目学校试过,均没问题。

In reply to ding alen

回复: 寻求帮助:关于外网访问moodle的问题

h db發表於

安装moodle后,找到moodle安装目录下的config.php文件,找到$CFG->wwwroot = 'http://xxx.xxx.xxx.xxx';将它修改为$CFG->wwwroot = 'http://'.$_SERVER['HTTP_HOST'];即可。如果有下级目录的话修改为$CFG->wwwroot = 'http://'.$_SERVER['HTTP_HOST'].'/moodle';

解决思路是让系统自动判定访问路径。完美解决问题 。