switch(array_shift(explode(trim($_SERVER['REQUEST_URI'], '/')))) {
    case 'about': break;
}$module = array_shift(explode(trim($_SERVER['REQUEST_URI'], '/')));
// TODO: Проверка на попытку взлома относительными путями и прочее
if (is_file('path/to/modules/' . $module . '/controller.php')) {
    include ...;
} 
  
  $('td')
  .mousedown(function(){
    $(this).toggleClass('selected');
    $('td').on('mouseenter',function(){
      $(this).toggleClass('selected');
    });
  })
  .mouseup(function(){
    $('td').off('mouseenter');
  });var td = $('#timeGrid td'),
    selection = {
        single: function(el) {
            td.not(el).removeClass(this.cl);
            this.ctrl(el);
        },
        shift: function(el) {
            if (typeof this.last !== 'number') {
                return this.single(el);
            }
            var till = $(el).index(this.slcr),
                from = this.last;
            if (from > till) till = [from, from = till][0];
            td.not(td.eq(this.last)).removeClass(this.cl);
            td.slice(from, till).add(el).addClass(this.cl);
        },
        ctrl: function(el) {
            $(el).addClass(this.cl);
            this.last = $(el).index(this.slcr);
            console.log(this.last);
        },
        slcr: '#timeGrid td',
        cl: 'pressedTime',
        last: null
    };
td.on('click', function(e) {
    method = !e.shiftKey && !e.ctrlKey ? 'single' : (e.shiftKey ? 'shift' : 'ctrl');
    selection[method](this);
});var table = $('#timeGrid'),
    td = $('td', table),
    selection = {
        single: function(el) {
            td.not(el).removeClass(this.cl);
            this.ctrl(el);
        },
        shift: function(el) {
            if (typeof this.last !== 'number') {
                return this.single(el);
            }
            var till = $(el).index(this.slcr),
                from = this.last;
            if (from > till) till = [from, from = till][0];
            td.not(td.eq(this.last)).removeClass(this.cl);
            td.slice(from, till).add(el).addClass(this.cl);
        },
        ctrl: function(el) {
            $(el).addClass(this.cl);
            this.last = $(el).index(this.slcr);
        },
        slcr: '#timeGrid td',
        cl: 'pressedTime',
        last: null
    };
var pressed = false;
td.on({
    mousedown: function(e) {
        method = !e.shiftKey && !e.ctrlKey ? 'single' : (e.shiftKey ? 'shift' : 'ctrl');
        selection[method](this);
        pressed = true;
    },
    mouseenter: function() {
        if (pressed) {
            selection.shift(this);
        }
    }
});
$(document).on('mouseup', '*', function(e) {
    pressed = false;
}); 
  
   UPD: Можно использовать curl
UPD: Можно использовать curl$curl_handle = curl_init();
curl_setopt_array($curl_handle, array(
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HEADER => false,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0 mySuperBot',
    CURLOPT_HTTPHEADER => array("X-Requested-With: XMLHttpRequest"),
));
$html = curl_exec($curl_handle);