Ir para conteúdo

POWERED BY:

Arquivado

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

Paulo de Tarso F. M.

Personalizando páginas de erros

Recommended Posts

Pessoal!

 

Bom, sei que existem duas maneiras de se personalizar as páginas de erros (pelo menos só conheço duas): via .htaccess e via arquivos .shtml.

 

No caso de arquivos .htaccess, teríamos uma estrutura igual a essa:

ErrorDocument 401 http://www.dominio.com.br/401.php
ErrorDocument 403 http://www.dominio.com.br/403.php
ErrorDocument 404 http://www.dominio.com.br/404.php
ErrorDocument 500 http://www.dominio.com.br/500.php
Com as declarações acima, caso alguém tente acessar uma página não encontrada (404), permissão de acesso negada (403), etc., a página seria redirecionada para a página especificada em cada tipo de erro.

 

Já no caso de uso de arquivos .shtml, podemos personalizar as mensagens com uso de variáveis. Por exemplo, para exibir algo assim:

Você tentou acessar a página XXXX, mas ela não existe.

Você utiliza o seguinte:

<p>Você tentou acessar a página <span><strong><!--#echo var="HTTP_HOST" --><!--#echo var="REQUEST_URI" --></strong></span>, mas ela não existe.</p>

Ambos os casos que citei funcionam e eu testei, mas...

 

1) Qual o problema de utilizar redirecionamentos via .htaccess?

 

Primeiro, redirecionando a página com o .htaccess, a URL exibida no browser, naturalmente, é modificada. Se eu acesso, por exemplo, "http://www.dominio.com.br/pagina_erro", ao redirecionar, ficaria lá na barra de endereços "http://www.dominio.com.br/404.php". Oras, se você quer informar o usuário que ele acessou uma página que não existe, com certeza ele não iria reconhecer que ele tenha digitado esse endereço mesmo (no caso de usuários que sabem utilizar um browser "de verdade", que não são somente simples usuários, como nós... http://forum.imasters.com.br/public/style_emoticons/default/assobiando.gif).

 

Outra coisa, utilizando redirecionamentos via .htaccess, não consigo exibir uma mensagem igual ao caso dos arquivos .shtml, pois o REQUEST_URI não será mais a página errada que a pessoa tentou acessar, será sempre a página do erro!

 

Vamos a um exemplo. Acessem o link abaixo. Essa é a página inicial:

 

http://forum.imasters.com.br/public/style_emoticons/default/seta.gif http://www.scherrer-net.com/htaccess/index.php

 

Aqui estou usando o arquivo .htaccess:

ErrorDocument 404 http://www.scherrer-net.com/htaccess/404.php
A página 404.php está assim:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pt-br" lang="pt-br">
<head>
	<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
	<meta http-equiv="content-language" content="pt-br" />
	<meta http-equiv="imagetoolbar" content="no" />
	<link rel="stylesheet" type="text/css" href="css/estilos.css" media="screen, projection" />
	<title>Exemplo</title>
</head>
<body>
	<h1><a href="index.php" title="Logotipo"><img src="imagens/logotipo.gif" alt="Logotipo" width="110" height="94" />Logo<span>tipo</span></a></h1>
	<hr />
	<h2>Página não encontrada</h2>
	<p>Você tentou acessar a página <span><strong><?php echo $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; ?></strong></span>, mas ela não existe.</p>
</body>
</html>
Agora, tentem acessar uma página que não existe, por exemplo:

 

http://forum.imasters.com.br/public/style_emoticons/default/seta.gif http://www.scherrer-net.com/htaccess/pagina_inexistente.php

 

Vejam o que acontece: a URL mudará para "http://www.scherrer-net.com/htaccess/404.php", e a mensagem exibida será:

Você tentou acessar a página www.scherrer-net.com/htaccess/404.php, mas ela não existe.

Oras, não foi a página 404.php que eu realmente tentei acessar, mas sim a pagina_inexistente.php!

 

Então, fica minha pergunta aqui em relação ao uso de arquivos .htaccess: é possível utilizarmos uma página PHP específica para os erros, mas que o endereço na barra de endereços não mude? :mellow:

 

 

2) Qual o problema de utilizar arquivos .shtml?

 

Bom, hoje eu trabalho com essa opção devido aos problemas que citei acima, de alterar a URL e tudo mais. Vejam que utilizando arquivos .shtml a URL não é alterada, e a mensagem é exibida conforme gostaria. Vejam esse exemplo:

 

Página "normal":

http://forum.imasters.com.br/public/style_emoticons/default/seta.gif http://www.scherrer-net.com/shtml/index.php

 

Página inexistente:

http://forum.imasters.com.br/public/style_emoticons/default/seta.gif http://www.scherrer-net.com/shtml/pagina_inexistente.php

 

Mas vocês então poderiam me perguntar: "Se com arquivos .shtml está funcionando, qual o problema então?" O problema está em pastas e subpastas. A página de erro foi exibida corretamente porque o arquivo de erro está no mesmo diretório que estaria a página inexistente. Agora, tentem acessar uma página que estaria em um diretório qualquer, vejam o que acontece:

 

http://forum.imasters.com.br/public/style_emoticons/default/seta.gif http://www.scherrer-net.com/shtml/outro_diretorio/pagina_inexistente.php

 

Viram o que acontece? Os caminhos dos arquivos (CSS, JS, imagens, etc) não são alterados! Qual a solução? Utilizar caminhos absolutos! Por exemplo, no caso do arquivo CSS:

<link rel="stylesheet" type="text/css" href="http://www.scherrer-net.com/shtml/css/estilos.css" media="screen, projection" />
Tá, funciona, mas não tá certo isso não! Sabem por quê? Porque existem sites que a URL não é alterada, e se acessarem o código-fonte da página do erro, os caminhos para os arquivos não são absolutos!

 

Vejam este site:

 

http://forum.imasters.com.br/public/style_emoticons/default/seta.gif http://mobiforge.com/

 

Agora, acessem uma página inexistente, por exemplo:

 

http://forum.imasters.com.br/public/style_emoticons/default/seta.gif http://mobiforge.com/pagina_inexistente.html

 

Ou ainda, uma página dentro de algum diretório:

 

http://forum.imasters.com.br/public/style_emoticons/default/seta.gif http://mobiforge.com/outro_diretorio/pagina_inexistente.html

 

Vejam o código-fonte: os arquivos externos, os links, as imagens, nada utiliza caminhos absolutos! :angry:

 

Aí pensei em utilizar a tag <base />, mas só funciona com links e com imagens, não funciona com os arquivos CSS, JS, etc.

 

Ou seja, sem chance... http://forum.imasters.com.br/public/style_emoticons/default/closedeyes.gif Então, minha pergunta é: como fazer com que eu tenha uma página de erro personalizada, cuja URL não seja alterada na barra de endereços, e que possa trabalhar sem a necessidade de se informar caminhos absolutos para os arquivos, links e imagens? :mellow:

 

Será que alguém poderia me auxiliar nessa tarefa?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara...nunca mexi com isso mais tenho que colocar num site da minha empresa que estou desenvolvendo [ RGF - Sistemas ] e tambem adaptar algo parecido num sistema que estou a desenvolver, tipo controle de erros mas...agora vendo a sua duvida aí...me assustou...pois não caso anda ainda desse tipo...rssss

 

Tambem estou a procura do mesmo que você...caso eu encontrar postarei aki beleza....

 

E desculpe pela lorota aí, mas...só posso contribuir com comentarios e te desejar boa sorte em sua procura. http://forum.imasters.com.br/public/style_emoticons/default/assobiando.gif

 

Abraços... http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como não são caminhos absolutos? São sim, mas são caminhos de diretório, não de URL. Note que começa com barra. Isso significa diretório raiz do site (significaria diretório raiz do sistema de arquivos, se o usuário tivesse acesso a ele).

 

<img id='bground' src='/img/Bibi.jpg/none/20/20/crop/true' />

<link media="all" href="/sites/all/themes/zen/mobiforge/blueprint/screen.css" type="text/css" rel="stylesheet" />

 

Até onde sei, isso são links absolutos.

 

Corrijam-me se eu estiver errado. :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não, não está errado não, amigo Beraldo. Está corretíssimo!!!

 

Eu não sabia disso não... http://forum.imasters.com.br/public/style_emoticons/default/assobiando.gif Tá vendo como a vida é uma eterna aprendizagem? :rolleyes:

 

Com o uso de arquivos .shtml funcionou, tranqüilo, mas eu queria saber se existe a possibilidade de se fazer algo com o .htaccess. Não tem como redirecionar para a página do erro personalizada em PHP, mas não alterar a URL na barra de endereços? :mellow:

 

(Bom, essa minha última pergunta é meio "dãrr", né, pois se houvesse essa possibilidade, seria algo mais ou menos assim quando o pessoal quer que mude de página, mas a URL fique sempre a mesma, sem utilizar frames... http://forum.imasters.com.br/public/style_emoticons/default/pinch.gif Sorry...)

 

Mas então, por que então que o REQUEST_URI muda? Não tem como pelo menos pegar então a URL anterior ao redirecionamento? Pois dessa forma teríamos o endereço alterado na barra de ndereços, mas eu teria como personalizar pelo menos uma mensagem como eu citei de exemplo anteriormente... Alguma idéia?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma forma não confiável é usando a variável $_SERVER['HTTP_REFERER'], mas não é confiável. É fácil desabilitá-la em navegadores (acho que até dá para mudar o valor dela...). No Firefox, ela é facilmente desabilitada com a barra de ferramentas WebDeveloper.

 

Comecei a escrever esse post, mas percebi que ia falar besteira. Eu ia dizer para salvar a URL num cookie ou na sessão e depois resgatá-la na página de erro. O problema é que a URL da página inexistente não seria capturado - afinal, ela não existe, logo, jamais alteraria o valor do cookie/sessão.

 

Sua pergunta não é "dãrr", como você disse. hehe

Fiquei na dúvida agora. :unsure:

 

Esses dais vi este artigo:

http://imasters.com.br/artigo/11191/ph...uito_eficiente/

 

Ele usa htaccess e a variável $_SERVER['REDIRECT_URL']. Porém, não consigo usar essa variável. O índice não existe. Ele não consta nem na documentação:

http://www.php.net/manual/pt_BR/reserved.v...bles.server.php

 

 

Mas mesmo assim a URL seria alterada. Porém, seria possível pegar a URL da ágina não encontrada.

 

Já nao sei o que responder... http://forum.imasters.com.br/public/style_emoticons/default/blush.gif

heheh

 

Vamos ver se alguém sabe a resposta. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual o problema de utilizar redirecionamentos via .htaccess?

 

Primeiro, redirecionando a página com o .htaccess, a URL exibida no browser, naturalmente, é modificada. Se eu acesso, por exemplo, "http://www.dominio.com.br/pagina_erro", ao redirecionar, ficaria lá na barra de endereços "http://www.dominio.com.br/404.php". Oras, se você quer informar o usuário que ele acessou uma página que não existe, com certeza ele não iria reconhecer que ele tenha digitado esse endereço mesmo (no caso de usuários que sabem utilizar um browser "de verdade", que não são somente simples usuários, como nós... ).

Sobre isso, acho que tenha como resolver com um

 

echo $_SERVER['HTTP_REFERER'];

Como o .htaccess vai trabalhar como redirecionamento, o referer vai funcionar legal, em cima disso, basta explodiar o que você não deseja e etc.

 

//Edit

Como nosso amigo Beraldo disse, não é confiável.

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.