URLs amigáveis, Linux e Windows

URLs amigáveis são URLs fáceis de se decorar para um visitante humano e fáceis de indexar para um visitante Robô.
Existem dois tipos de URLs, as estáticas e as dinâmicas, abaixo exemplos:

URLs estáticas:
http://www.meusite.com.br/artigo_dia_mes_ano.html

URLs dinâmicas:
http://www.meusite.com.br/artigo.php?cod=12&id=1&valor=10

Conforme podemos observar acima os dois tipos de URLs são de difícil memorização, agora um exemplo de URL Amigável:

http://www.meusite.com.br/artigo/dia/mes/ano

A princípio você pode pensar que não há problema algum com URLs estáticas e dinâmicas, mas pense um segundo, você consegue decorar facilmente uma URL desse tipo?

Além do problema da complexidade, essas URLs geram outros problemas:

  • Alguns mecanismos de busca podem deixar de indexar estas páginas, por causa dos caracteres ‘?’ e ‘&’;
  • A tecnologia usada na construção do site está sendo exposta;
  • Se você resolver mudar a tecnologia do seu site (asp para php, por exemplo), todas as URLs terão que ser mudadas;
  • Expor a tecnologia usada para fazer um site pode ser um problema de segurança

A solução é simples: mapear as URLs reais para URLs “virtuais”, mais fáceis de compreender e indexar, e independentes da tecnologia utilizada.

Vamos ver agora algumas dicas simples para trabalhar com rewrite para gerar URL amigáveis tanto para Linux Apache quando para Windows a partir do IIS7.

URL amigável no Linux:

Apache mod_rewrite

mod_rewrite é um módulo escrito para o servidor Apache, responsável pela reescrita de URLs em páginas Web.

Hoje em dia, com a popularização das práticas do SEO, usabilidade e acessibilidade, as urls amigáveis são cada vez mais utilizada por grande portais.

Para que as URL amigáveis funcionem o módulo mod_rewrite deve esta configurado e ativo no Apache.

Instalando o mod_rewrite no Apache

Para habilitar o mod_rewrite no Apache digite:

a2enmod rewrite

Com o acesso root, abra o arquivo /etc/apache2/sites-enabled/000-default em um editor de textos, pode ser o vi ou o nano

Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all

E altere AllowOverride None para AllowOverride All.

Reiniciei o serviço do Apache com o comando /etc/init.d/apache2 restart.


Criado as regras:

O arquivo .htaccess deve esta localizado na pasta ROOT com o seguinte código:

RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ index.php?cod=$1

Onde:

RewriteEngine On
Ativa o suporte à reescrita

RewriteCond %{SCRIPT_FILENAME} !-f
Não aplica a condição para arquivos

RewriteCond %{SCRIPT_FILENAME} !-d
Não aplica a condição para diretórios

RewriteRule ^(.*)$ index.php?cod=$1
Regra de reescrita onde qualquer string (.*) após a pasta, onde estiver o .htaccess, será interpretado por index.php passado na variável cod

Na pratica ficaria assim:

www.seusite.com.br/secao/subsecao/
será interpretada como
www.seusite.com.br/index.php?cod=secao/subsecao/

Apache Module mod_rewrite

http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html

URL amigável no Windows

Microsoft URL Rewrite Module 2.0 for IIS 7

Com o URL Rewrite é possivel interceptar qualquer tipo de requisição seja ela ASP, ASP.NET, Perl, PHP ou HTML, e reescrever a URL antes que ela seja processada pelo IIS. A configuração é feita de forma fácil e intuitiva, atendendo tanto usuários experientes quanto os mais iniciantes.

Criado as regras:

O arquivo web.config deve esta localizado na pasta ROOT com o seguinte codigo:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
   <rewrite>
     <rules>
        <rule name="Rule IIS7">
          <match url="^(.*)$" ignoreCase="false" />
           <conditions>
              <add input="{SCRIPT_FILENAME}" matchType="IsFile"ignoreCase="false" negate="true" />
              <add input="{SCRIPT_FILENAME}"matchType="IsDirectory" ignoreCase="false" negate="true" />
           </conditions>
          <action type="Rewrite" url="index.php?cod={R:1}" appendQueryString="false" />
       </rule>
    </rules>
   </rewrite>
  </system.webServer>
</configuration>

Onde:

<action type=”Rewrite” url=”index.php?cod={R:1}” appendQueryString=”false” />
Regra de reescrita onde qualquer string (.*) após a pasta, onde estiver o web.config, será interpretado por index.php passado na variável cod

Na pratica ficaria assim:

www.seusite.com.br/secao/subsecao/
será interpretada como
www.seusite.com.br/index.php?cod=secao/subsecao/

 

Download do módulo URL Rewrite:

x86 version of the URL Rewrite module

x64 version of the URL Rewrite module

http://www.iis.net/download/URLRewrite

Usando URL Rewrite:

http://learn.iis.net/page.aspx/460/using-the-url-rewrite-module/

Para converter as regras de .htaccess para web.config acesso o link abaixo:

http://learn.iis.net/page.aspx/470/importing-apache-modrewrite-rules/

 

Interpretando com PHP

Com o arquivo de reescrita criado, já podemos criar a lógica para que as URL amigáveis sejam interpretadas pelo PHP.

Veja um exemplo auto-explicativo:

<?php

// separa a URL por "/" e insere num vetor (array)

$url = explode('/', $_GET['cod']);

/* imprime a string passada após a primeira / * no exemplo acima, seria: seção */

echo $url[0];

/* imprime a string passada após a segunda / * no exemplo acima, seria: subseção */

echo $url[1];

?>

Espero ter ajudado, até a próxima.

 

Publicado em Desenvolvimento
4 comentários sobre “URLs amigáveis, Linux e Windows
  1. Olá. Gostei do post, mas fiquei com uma dúvida. Onde coloco o arquivo PHP. Chamo em cada página através da função include? Abraço, Flávio

  2. admin disse:

    Flávio,

    O index.php fica na raiz junto com o web.config ou o .htaccess no caso linux.

    Esses arquivos que vão indicar a localização do arquivo inicial “url=”index.php?cod=” onde index.php seria o arquivo inicial que recebe na variável cod valor que vem depois da “/” barra ex: “www.seusite.com.br/(valor que é recebido na variável cod).

    Você pode usar a função explode para separar os valores entre as barras “/” e includ para abrir os arquivos.

    pode usar a criatividade.

    Abraços,

    Sérgio

  3. Temos um cliente com um servidor em windows IIS6.
    O site é utilizando o CMS WordPress.
    Qual seria a solução para esse servidor IIS6?

  4. admin disse:

    O “URL Rewrite Module” só funciona a partir do IIS 7, no caso você teria que migrar seu cliente para um servidor Windows Server 2008, ou 2008 R2, ou mesmo migrar para um linux cPanel.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

*

This blog is kept spam free by WP-SpamFree.