Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

ebotega

Como eu trabalho com os links de uma página onde tenho url amigável

Recommended Posts

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.


Compartilhar este post


Link para o post
Compartilhar em outros sites

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).

Compartilhar este post


Link para o post
Compartilhar em outros sites

ok, você diz eu colocar nos links o endereço do site mesmo isso? <a href="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:

Compartilhar este post


Link para o post
Compartilhar em outros sites

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;

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

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'.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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>

Compartilhar este post


Link para o post
Compartilhar em outros sites

É 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á.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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>

Compartilhar este post


Link para o post
Compartilhar em outros sites

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...

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.