For example, if I rewrite /category/topic/post/
to /index.php?cat=1&topic=2&post=3
, how can I get /index.php?cat=1&topic=2&post=3
original uri should be in $_SERVER['REQUEST_URI']
Here is how to get the URL received by PHP after being rewritten with mod_rewrite in Apache:
$url = $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'];
You can compare this url with the actual url in the browser to debug any rewrite rules in .htaccess
You can recreate it pretty easily. $_SERVER['PHP_SELF']
will still give you the correct file name for the script. This should do the trick:
$url = $_SERVER['PHP_SELF'];
$parts = array();
foreach( $_GET as $k=>$v ) {
$parts[] = "$k=" . urlencode($v);
}
$url .= "?" . implode("&", $parts);
$url
will now be the URL you're looking for.
EDIT: @carpereret's answer is far better. Upvote him instead