diff --git a/admin/index.php b/admin/index.php
index e740c722b6b..0579cab612a 100644
--- a/admin/index.php
+++ b/admin/index.php
@@ -555,7 +555,14 @@
print_box(get_string('datarootsecuritywarning', 'admin', $CFG->dataroot), 'generalbox adminwarning');
}
-/// If no recently cron run
+ if (substr($CFG->wwwroot, -1) == '/') {
+ print_box(get_string('cfgwwwrootslashwarning', 'admin'), 'generalbox adminwarning');
+ }
+ if (strpos($ME, $CFG->httpswwwroot.'/') === false) {
+ print_box(get_string('cfgwwwrootwarning', 'admin'), 'generalbox adminwarning');
+ }
+
+ /// If no recently cron run
$lastcron = get_field_sql('SELECT max(lastcron) FROM ' . $CFG->prefix . 'modules');
if (time() - $lastcron > 3600 * 24) {
$strinstallation = get_string('installation', 'install');
diff --git a/lang/en_utf8/admin.php b/lang/en_utf8/admin.php
index b89df4f4130..d27726dd768 100644
--- a/lang/en_utf8/admin.php
+++ b/lang/en_utf8/admin.php
@@ -37,6 +37,8 @@ $string['cachetext'] = 'Text cache lifetime';
$string['cachetype'] = 'Cache Type';
$string['calendar_weekend'] = 'Weekend Days';
$string['calendarsettings'] = 'Calendar';
+$string['cfgwwwrootwarning'] = 'You have defined $CFG->wwwroot incorrectly in your config.php file. It does not match the URL you are using to access this page. Please correct it, or you will experience strange bugs like MDL-11061.';
+$string['cfgwwwrootslashwarning'] = 'You have defined $CFG->wwwroot incorrectly in your config.php file. You have included a \'/\' character at the end. Please remove it, or you will experience strange bugs like MDL-11061.';
$string['change'] = 'change';
$string['changesitelang'] = 'Change site language';
$string['choosefiletoedit'] = 'Choose file to edit from the box above';
diff --git a/lib/weblib.php b/lib/weblib.php
index b83871ae3c5..f4c6f03eca1 100644
--- a/lib/weblib.php
+++ b/lib/weblib.php
@@ -270,6 +270,9 @@ function qualified_me() {
}
}
+ // TODO, this does not work in the situation described in MDL-11061, but
+ // I don't know how to fix it. Possibly believe $CFG->wwwroot ahead of what
+ // the server reports.
if (isset($_SERVER['HTTPS'])) {
$protocol = ($_SERVER['HTTPS'] == 'on') ? 'https://' : 'http://';
} else if (isset($_SERVER['SERVER_PORT'])) { # Apache2 does not export $_SERVER['HTTPS']