Eu uso esse código para obter o URL completo:
$actual_link = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
O problema é que eu uso algumas máscaras no meu .htaccess
, portanto, o que vemos na URL nem sempre é o caminho real do arquivo.
O que eu preciso é obter o URL, o que está escrito no URL, nada mais e nada menos - o URL completo.
Preciso entender como ele aparece na barra de navegação no navegador da web e não o caminho real do arquivo no servidor.
Respostas:
Dê uma olhada
$_SERVER['REQUEST_URI']
, ou seja,(Observe que a sintaxe de cadeia de caracteres entre aspas duplas está perfeitamente correta )
Se você deseja oferecer suporte a HTTP e HTTPS, pode usar
Nota do editor: o uso deste código tem implicações de segurança . O cliente pode definir HTTP_HOST e REQUEST_URI para qualquer valor arbitrário que desejar.
fonte
'http' . (isset($_SERVER['HTTPS']) ? 's' : '') . '://' . "{$_SERVER['HTTP_HOST']}/{$_SERVER['REQUEST_URI']}"
Versão curta para o link de saída em uma página da web
Aqui estão mais alguns detalhes sobre os problemas e casos extremos do formato //example.com/path/
Versão completa
Esta é uma versão fortemente modificada de
http://snipplr.com/view.php?codeview&id=2734
.Estrutura de URL:
esquema: // nome do usuário: senha @ domínio: porta / caminho? query_string # fragment_id
As partes em negrito não serão incluídas pela função
Notas:
username:password
uma URL completa ou o fragmento (hash).#fragment_id
arquivo não é enviado ao servidor pelo cliente (navegador) e não será adicionado ao URL completo.$_GET
conterá apenasfoo=bar2
para um URL como/example?foo=bar1&foo=bar2
.$_SERVER['REQUEST_URI']
e retornarão/example?foo=bar2
para uma URL como/example?foo=bar1&foo=bar2
, use$_SERVER['QUERY_STRING']
neste caso.URL + URN
, mas devido ao uso popular, o URL agora significa URI e URL.HTTP_X_FORWARDED_HOST
se não planeja usar proxies ou balanceadores.Host
cabeçalho deve conter o número da porta, a menos que seja o número padrão.Variáveis controladas pelo cliente (navegador):
$_SERVER['REQUEST_URI']
. Quaisquer caracteres não suportados são codificados pelo navegador antes de serem enviados.$_SERVER['HTTP_HOST']
e nem sempre está disponível de acordo com os comentários no manual do PHP: http://php.net/manual/en/reserved.variables.php$_SERVER['HTTP_X_FORWARDED_HOST']
é definido pelos balanceadores e não é mencionado na lista de$_SERVER
variáveis no manual do PHP.Variáveis controladas pelo servidor:
$_SERVER['HTTPS']
. O cliente opta por usar isso, mas o servidor retorna o valor real de vazio ou "ativado".$_SERVER['SERVER_PORT']
. O servidor aceita apenas números permitidos como portas.$_SERVER['SERVER_PROTOCOL']
. O servidor aceita apenas determinados protocolos.$_SERVER['SERVER_NAME']
. Ele é definido manualmente na configuração do servidor e não está disponível para IPv6, de acordo com o kralyk .Relacionado:
HTTP_HOST vs. SERVER_NAME
É o número da porta necessário no parâmetro de cabeçalho "Host" HTTP?
https://stackoverflow.com/a/28049503/175071
fonte
$_SERVER['REQUEST_URI']
será exibido/example?foo=bar2
para URL como/example?foo=bar1&foo=bar2
Host
cabeçalho, não vi isso definido como aquele, obrigado por mencioná-lo, irá adicioná-lo como um tweakExemplos para:
https://(www.)example.com/subFolder/myfile.php?var=blabla#555
Aviso prévio ! ! !
#
partes da hashtag foram usadas manualmente no exemplo acima apenas para fins ilustrativos, no entanto, os idiomas do servidor (incluindophp
) não podem detectá-las nativamente (somente o Javascript pode fazer isso, pois a hashtag é apenas abrowser/client side
funcionalidade).DIRECTORY_SEPARATOR
retorna\
para hospedagem do tipo Windows, em vez de/
.Para WordPress
fonte
Aqui está uma solução usando uma declaração ternária , mantendo o código mínimo:
Essa é a maneira mais pequena e fácil de fazer isso, assumindo que o servidor da web esteja usando a porta 443 padrão para HTTPS .
fonte
$_SERVER["HTTPS"] == "on"
para verificar se o SSL está ativado.Meu método favorito de plataforma cruzada para encontrar o URL atual é:
fonte
Basta usar:
fonte
http://example.com
:8080
/request.php
e falhar. Essas respostas são complicadas por um motivo.Nota: Acabei de fazer uma atualização no código de Timo Huovinen , para que você não obtenha nenhum parâmetro GET no URL. Este URL é simples e remove coisas como
?hi=i&am=a&get
.Exemplo:
será mostrado como:
Isso é bom, a menos que você use os paramaters GET para definir algum conteúdo específico; nesse caso, você deve usar o código dele! :-)
fonte
Código claro, trabalhando em todos os servidores da web (Apache, nginx, IIS, ...):
fonte
Aqui está a minha solução - o código é inspirado no Tracy Debugger . Foi alterado para suportar diferentes portas do servidor. Você pode obter o URL atual completo, incluindo
$_SERVER['REQUEST_URI']
ou apenas o URL básico do servidor. Verifique minha função:Aqui está o código de teste:
fonte
http_build_url
requer o pecl_http instalado #Usar:
Se você deseja oferecer suporte a HTTP e HTTPS:
fonte
A mesma técnica da resposta aceita, mas com suporte HTTPS e mais legível:
fonte
Eu fiz essa função para lidar com o URL:
fonte
Use esta linha única para encontrar o URL da pasta pai (se você não tiver acesso a http_build_url () que vem junto com pecl_http):
fonte
Isso é muito fácil de fazer com suas variáveis de ambiente Apache. Isso funciona apenas com o Apache 2, que suponho que você esteja usando.
Basta usar o seguinte código PHP:
fonte
Tente o seguinte:
$_SERVER
é uma matriz que contém informações como cabeçalhos, caminhos e locais de script. As entradas nesta matriz são criadas pelo servidor da web. Não há garantia de que todos os servidores da web forneçam qualquer um deles; os servidores podem omitir alguns ou fornecer outros não listados aqui. Dito isto, um grande número dessas variáveis é contabilizado na especificação »CGI / 1.1, portanto, você deve esperar isso.$HTTP_SERVER_VARS
contém a mesma informação inicial, mas não é uma superglobal. (Observe que$HTTP_SERVER_VARS
e$_SERVER
são variáveis diferentes e que o PHP as manipula como tal)fonte
Você pode usar http_build_url sem argumentos para obter o URL completo da página atual:
fonte
Eu fiz essa classe para lidar com meus URIs
Claro que você precisa adaptá-lo às suas necessidades e sistema!?!
Ele ainda precisa ser aperfeiçoado, mas é uma solução básica para um sistema URI centralizado: D
fonte
Esta é a solução para o seu problema:
fonte
Eu usei essa afirmação.
Eu espero que isso te ajude.
fonte
fonte
Eu usei o código abaixo e está funcionando bem para mim, nos dois casos, HTTP e HTTPS.
Demo
fonte
$_SERVER['HTTPS'] = 'off'
acionará o caminho HTTPS. Isso não parece certo. Por outro lado, também não acho que a lógica original estivesse correta.fonte
Aqui está a base de uma versão mais segura da resposta aceita, usando a função filter_input do PHP , que também compensa a falta potencial de
$_SERVER['REQUEST_URI']
:Você pode usar alguns filtros diferentes para ajustá-lo ao seu gosto.
fonte
Você pode usar
HTTP_ORIGIN
como ilustrado no trecho abaixo:fonte
Uso muito simples:
fonte
Eu acho que esse método é bom ... tente
fonte
Isso funciona para HTTP e HTTPS.
Saída algo como isto.
fonte
Para saber mais: Como obter o URL completo de uma página usando PHP
fonte