Já teve a dificuldade de recuperar a URL atual de uma solicitação com PHP simples em diferentes domínios raiz ou ambientes locais (com caminhos estranhos)?
<?php
function request_path()
{
$request_uri = explode('/', trim($_SERVER['REQUEST_URI'], '/'));
$script_name = explode('/', trim($_SERVER['SCRIPT_NAME'], '/'));
$parts = array_diff_assoc($request_uri, $script_name);
if (empty($parts))
{
return '/';
}
$path = implode('/', $parts);
if (($position = strpos($path, '?')) !== FALSE)
{
$path = substr($path, 0, $position);
}
return $path;
}
Exemplos
Recupera p / novo em coderwall.com/p/new .
Ou linguagens / PHP em github.com/languages/PHP .
Para que usar? Faça alguma rota rápida como esta:
<?php
$routes = [
'/' => function()
{
// home page callback
},
'about-us' => ...,
'profile/edit' => ...
];
$path = request_path();
if (isset($routes[$path]) AND is_callable($routes[$path]))
{
$routes[$path]();
}
else
{
// show some fancy error page with nyan cat
}
.htaccess
RewriteEngine On
# RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]