// Get HTTP/HTTPS (the possible values for this vary from server to server)
$myUrl = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] && !in_array(strtolower($_SERVER['HTTPS']),array('off','no'))) ? 'https' : 'http';
// Get domain portion
$myUrl .= '://'.$_SERVER['HTTP_HOST'];
// Get path to script
$myUrl .= $_SERVER['REQUEST_URI'];
// Add path info, if any
if (!empty($_SERVER['PATH_INFO'])) $myUrl .= $_SERVER['PATH_INFO'];
// Add query string, if any (some servers include a ?, some don't)
if (!empty($_SERVER['QUERY_STRING'])) $myUrl .= '?'.ltrim($_SERVER['REQUEST_URI'],'?');
echo $myUrl;
... это моя самая устойчивая рутина для этого.
personDaveRandomschedule05.12.2011
comment
+1 Без тестирования это выглядит как самый полный ответ.
- personMichael Mior; 05.12.2011
comment
$_SERVER['REQUEST_URI'] включает информацию о пути и строку запроса, если они есть, так что это удваивает их для меня. Удаление строк PATH_INFO и QUERY_STRING исправляет это (YMMV, конфиги сервера могут отличаться).
- personPaul Calcraft; 05.12.2017
Вы также можете использовать $_SERVER['HTTPS'] для определения HTTP или HTTPS.
Я рекомендую использовать $_SERVER['REQUEST_URI'], так как это именно то, что ищет пользователь, до каких-либо перезаписей или чего-либо еще, и включает переменные GET.
personTakschedule05.12.2011
comment
@MichaelMior Спасибо за ваш комментарий, я обновил ответ.
- personTak; 05.12.2011
var_dump( $_SERVER);и найдите его или комбинацию записей. - person nickb   schedule 05.12.2011