Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Estou vendo algumas coisas sobre urls amigáveis e surgiu uma dúvida sobre como ficam os links das páinas. Vamos a dúvida: A partir desse vídeo ví que podemos fazer 'www.meusite.com.br/produtos' e ele direciona para a página produtos.php, ok. se eu informar 'www.meusite.com.br/produtos/12' busca-se o produto 12, ok. contudo se nessa página 'produtos' eu tiver um link para 'clientes' por exemplo, o link fica 'www.meusite.com.br/produtos/clientes' e deveria ficar 'www.meusite.com.br/clientes', ou seja, ele encara produtos como um diretório, se eu tiver 'www.meusite.com.br/produtos/12/a/b/c', clientes ficará 'www.meusite.com.br/produtos/12/a/b/clientes'. Se eu trabalhar com hífen (-) funciona, 'www.meusite.com.br/produtos-12', aí ele não encara 'produtos' como um diretório, mas gostaria de saber como trato a barra. Como informo nos links onde eu quero ir? Já tentei com $_SERVER['DOCUMENT_ROOT'] e $_SERVER['HTTP_HOST'], porém o link fica 'www.meusite.com.br/produtos/www.meusite.com.br/produtos/clientes'. Espero que tenha ficado um pouco clara a dúvida... Valeu.
ok, você diz eu colocar nos links o endereço do site mesmo isso? <a href="[http://www.meusite.com.br/clientes](http://www.meusite.com.br/clientes)">clientes</a>
Não fico meio "preso" à url do site, digo para eu testar localmente os scripts eu teria que usar '<a href="localhost/diretorioDoSite/clientes">clientes</a>', por isso veio a cabeça usar um $_SERVER...
Obs: de fato funcionou no servidor web usando a url absoluta. Facilitou visto que tenho as demais página dentro de um diretório 'pages' por exemplo e a index na rais tratando a url e incluindo (include) a página desejada.
Outra coisa, não há uma perda de tempo tentando acessar a todos tempo o site e os seus diretórios diretamente com a url absoluta do que apenas "caminhar" pelos diretórios já estando no site com ursl relativas? Não sei como o navegador ou o servidor web interpreta isso... :ermm:
vocês sabem como o wordpress faz isso?
lembro que ele chama uma função e a parte relativa do link.
com o link completo prejudica a agilidade na transição do site e fazer uma variável para pegar o domínio não vai mudar nada pra o SEO já que o link final é html.
eu faria assim:
<?php
$url_base = $_SERVER['HTTP_HOST'];
echo $url_base;
?>href="$url_base/produtos/12" fica 'www.meusite.com.br/produtos/12' e se eu tiver um link 'clientes' nessa página de produtos ele fica 'www.meusite.com.br/produtos/clientes' invés de 'www.meusite.com.br/clientes'. Esse é o problema que estou enfrentando. Os links dentro dessas páginas encaram tudo o que tem '/' na url como diretório, aí um link 'clientes' dentro de 'www.meusite.com.br/produtos/classe/tipo/cor/12' vira 'www.meusite.com.br/produtos/classe/tipo/cor/clientes'.
o link clientes vc está fazendo assim: href="<?=$url_base?>/clientes"?
Sim, href="<?php echo $url_base; ?>/clientes", só que o link direciona para 'www.meusite.com.br/produtos/www.meusite.com.br/produtos/clientes', isso porque ele encarou o 'www.meusite.com.br/produtos/' como o diretório raíz visto que eu informei na url '**www.meusite.com.br/produtos/**12', a página reconheceu o que está em negrito como sendo diretório principal e jogou tudo o que está no link depois desse 'diretório'.
Sem falar em outro problema com imagens. Se eu tenho a estrutura 'raiz/docs' e eu tento inserir uma imagem que está em 'raiz/img' na página produtos que está em 'docs' o src fira '../', pois ele tem que voltar um nível, Mas quando a index, que está na raiz, é carregada a imagem não aparece.
faça assim:
<?php
$url_base = $_SERVER['HTTP_HOST'];
//echo $url_base;
function getUrl($string){
return $string = "http://".$string;
}
?>
<a href="<?php echo getUrl($url_base)?>/clientes">clientes</a>É Bergs... parece que foi! Vou fazer mais alguns testes aqui pra ver se está tudo 100%.
O que você fez ali foi na verdade inserir o http:// no $_SERVER['HTTP_HOST'], correto? E sobre o que o mangakah falou sobre não usar super-globais pois eu poderia jogar isso numa constante (define) e trabalhar com ela pelo site.
Você também comentou que pegar o link completo prejudica a agilidade na transição do site, de certa forma não estamos pegando o link completo e inserindo no link?
Valeu pela força desde já.
Melhor assim (na minha opinião):
function getUrl($path) {
return "http"
. (isset($_SERVER["HTTPS"]) and $_SERVER["HTTPS"] == "on" ? "s" : "")
. "://"
. $_SERVER['SERVER_NAME']
. $path;
}
<a href="<?php echo getUrl('/clientes'); ?>">clientes</a>Blz, também funcionou na boa... mas por que você acha que esse é melhor mangakah? Corrige alguma 'brecha' ou cerca alguma url 'incorreta'?
Estou me familiarizando ainda com alguns termos e assim posso deixar passar algumas coisas...
Nada, só acho mais elegante mesmo... :P
hahaha, tá certo! Afinal programar também é arte.
Pra que toda essa gambiarra? Seta a tag base e pronto, a partir dai ela se torna base para os links/imagens/css e resolve o problema que você está tendo.
você diz setar o $_SERVER['HTTP_HOST'] direto no link ou usar um define... não é isso que o cara tá fazendo, mas chamando via função?
Boa ESerra, gostei, essa eu não conhecia.
Não inclua valores das super-globais ($_SERVER, etc.) em seus endereços (URL).
Você pode usar URL absoluta ou relativos.
Uma URL absoluta é a que contém o endereço completo da página, exemplo:
[inline]http://www.meusite.com.br/clientes[/inline]
Já a URL relativa, contém apenas o caminho ou URI:
[inline]/clientes[/inline]
Se o servidor estiver configurado corretamente, as duas maneiras de escrever a URL acima devem funcionar da mesma forma.
É mais recomendável,em termos de SEO, usar sempre a URL absoluta. Se você tiver um certificado TLS/SSL instalado, convém usar URLs independentes de protocolo, colocando apenas [inline]//[/inline].
Os seus problemas devem ser devidos a má configuração das reescritas de URL, mas não é possível dizer exatamente o que está errado sem ver as suas condições e regras de reescrita (RewriteCond e RewriteRule, no Apache).