Astin, parse_url плохо подходит для данного случая (может «сломаться»). Есть гораздо более простые и надежные способы отделить строку параметров.
str_replace тут тоже – полный абзац. Я сначала даже не понял, для чего вы ее пытаетесь использовать (первая мысль: убирает слеши между компонентами пути?
). Есть trim.
Выше давал ссылку, где все эти моменты учтены.
Про возню с главной (main и т.п.) уже писал в теме. Во всех наших движках, например, внутренним каноническим путем для главной является пустая строка и все хорошо! А в некоторых даже «контроллер» и вьюшка (речь просто о файлах) могут наследовать это имя (при добавлении расширения получится имя файла .php и т.п.), если оно не переопределено более подходящим для файла именем.