Muitas vezes nos deparamos com urls do tipo “wyz.com.br?id=12&foto=1643″, quando poderiamos fazer uma url mais “bonita” e que é melhor interpretada por serviços de busca, como o google, como “wyz.com.br/carlos/brasil”. Poderiamos fazer isso de 2 jeitos: Um sistema de pastas e arquivos “index.php”ou um redirecionamento 404. Neste artigo vou explicar como fazer o redirecionamento 404 para os servidores Apache e IIS:
Para dizer ao servidor qual pagina acessar ao retornar um erro 404, temos que fazer da seguinte maneira:
Crie um arquivo que será utilizado como pagina personalizada para o erro 404. ex. “404-handler.php”.
Para o Apache: Crie um arquivo no diretorio raiz chamado “.htaccess” e coloque dentro dele o seguinte código: “ErrorDocument 404 /404-handler.php”. Sem as “aspas” e substitua o “/404-handler.php” pelo nome do arquivo que você ira criar para ser a pagina personalizada de erros 404.
Para o IIS: Indique no sistema de gerenciamento o caminho para o arquivo de erro 404 personalizado.
Abra o arquivo “404-handler.php”. As variaveis $_SERVER['REQUEST_URI'] e $_SERVER['QUERY_STRING'], dependendo do servidor, vão fornecer a requisição da página. Num servidor apache por ex., a váriavel $_SERVER['QUERY_STRING'] irá fornecer algo como “/jose/brasil”, enquanto que num servidor IIS, a váriavel $_SERVER['REQUEST_URI'] irá fornecer: “404;http://wyz.com.br/jose/brasil”. Utilize tratamento de strings como substr, explode para trabalhar com elas. Um ex. criado por mim:
1 2 3 4 5 6 7 8 9 | if($_SERVER['QUERY_STRING'] != ""){ $querystring = explode(";", $_SERVER['QUERY_STRING']); $qs = substr(parse_url($querystring[1], PHP_URL_PATH), 1); //Retira a primeira "/" da URL }else{ $qs = substr($_SERVER['REQUEST_URI'], 1); //Retira a primeira "/" } while(substr($qs, -1) == "/") $qs = substr($qs, 0, -1); //retira todas as "/" do final, para evitar problemas com o explode $arr_qs = explode("/", $qs); //array contendo os niveis de requisição |
Ao final desse código, uma url contendo no final “/jose/brasil” irá formar um array: $arr_qs[0] => “jose”, $arr_qs[1] => “brasil”
A partir dai, trabalhe com as informações que você conseguiu através da requisição e depois faça um “include(‘index.php’)” (ou algum outro tratamento, dependendo de qual for a situação) ou retorne um 404 para caso a pagina requisitada deva retornar um 404 mesmo, através de:
1 2 | header("HTTP/1.0 404 Not Found"); exit; |
Tenha certeza de colocar o “exit;” após a tag header para evitar que qualquer outra informação adicional abaixo seja executada e também de não haver nenhuma informação impressa na tela, como algum “echo”, caso contrário a função “header” não irá funcionar.
Comentários
Deixe um comentário Trackback