Controlador frontal do PHP sem ter que codificar o baseroot

Parece que um simples controlador frontal , trabalhando também quando o aplicativo está em um subdiretório (por example.com/website/ , example.com/website/ ), com Apache + PHP pode ser um .htaccess como este:

 RewriteEngine On RewriteRule .* index.php [L] 

e este código PHP:

 $siteroot = substr($_SERVER['PHP_SELF'], 0, - strlen(basename($_SERVER['PHP_SELF']))); $request3 = substr(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), strlen($siteroot)); 

Na verdade, aqui estão os resultados que testei:

 | Requested URL | Controller file | $request3 | |-----------------------------------------------------------------------------------------| | example.com | example.com/index.php | '' | | example.com/ | example.com/index.php | '' | | example.com/hello | example.com/index.php | hello | | example.com/hello?id=10 | example.com/index.php | hello | | example.com/edit/article17 | example.com/index.php | edit/article17 | | example.com/edit/article17?a=b | example.com/index.php | edit/article17 | | example.com/website | example.com/website/index.php | '' | | example.com/website/ | example.com/website/index.php | '' | | example.com/website/hello | example.com/website/index.php | hello | | example.com/website/hello?id=10 | example.com/website/index.php | hello | | example.com/website/edit/article17 | example.com/website/index.php | edit/article17 | | example.com/website/edit/article17?a=b | example.com/website/index.php | edit/article17 | 

É confiável? Não há casos de canto?


Notas:

  1. Isto não está a funcionar:

      $request1 = $_SERVER['REQUEST_URI']; 

    porque se o controlador for example.com/website/index.php e chamamos example.com/website/calendar então $request1 será /website/calendar vez de calendar

  2. Isto não está a funcionar:

     $request2 = basename(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)); 

    porque se o controlador for example.com/website/index.php e chamamos example.com/website/edit/article17 e $request2 será o article17 vez de edit/article17