brendanheywood / moodle-local_cleanurls

Lets drag Moodle's url structure into this century...
37 stars 24 forks source link

Fix routing of unclean URLs #129

Open nyanginator opened 6 years ago

nyanginator commented 6 years ago

As discussed in https://github.com/brendanheywood/moodle-local_cleanurls/issues/128, this pull request deals with 2 issues:

  1. Direct loading of an unclean URL fails to route properly. While the page loads, the URL of the browser remains unclean.
  2. When loading an unclean URL with "index.php" in it, the page loads but the URL is rewritten with the Moodle directory appearing twice.

The html_head_setup_info()function in classes/url_rewriter.phpcontains $me = new moodle_url($ME), which prepends the Moodle directory (the path portion of $CFG->wwwroot) to $me. $MEalready has the Moodle directory as a prefix, so that is why the Moodle directory ends up appearing twice (e.g. http://www.example.com/moodle/moodle). Consequently, $me doesn't get the correct clean URL path.

The fix involves checking for the Moodle directory (specifically, the path portion of $CFG->wwwroot) in $ME. If present, remove it.

I've added a unit test in url_rewriter_html_head_setup_test.php for the following cases:

  1. Course view URL
    (e.g. http://www.example.com/moodle/course/view.php?id=5)
  2. Course users URL
    (e.g. http://www.example.com/moodle/user/?id=5)
  3. Course users URL with "index.php"
    (e.g. http://www.example.com/moodle/user/index.php?id=5)
  4. Course index URL
    (e.g. http://www.example.com/moodle/course/?categoryid=2)
  5. Course index URL with "index.php"
    (e.g. http://www.example.com/moodle/course/index.php?categoryid=2)
  6. Module URL
    (e.g. http://www.example.com/moodle/mod/page/?id=5)
  7. Module URL with "index.php"
    (e.g. http://www.example.com/moodle/mod/page/index.php?id=5)
  8. Module view URL
    (e.g. http://www.example.com/moodle/mod/page/view.php?id=9)
  9. User profile URL
    (e.g. http://www.example.com/moodle/user/profile.php?id=11)