Back-End

16 fev, 2007

URL Rewriting: no IIS com ASP, ASP.NET ou PHP

Publicidade

Olá Pessoal. Mais uma vez a técnica URL Rewriting vem à tona, não apenas para reforçar que esta técnica traz ótimos benefícios e competitividade a suas URLs, mas sim para aumentar o seu leque de aplicação, focando sua instalação em outros servidores web.

No artigo anterior foi bem focado o seu conceito, utilidade e sua aplicação voltada ao servidor web Apache, com a utilização do módulo Mod_rewrite. Mas existe a necessidade de expandir esta técnica em outros servidores, possibilitando assim a sua aplicação em outras linguagens.

Nativamente o servidor Apache não roda as linguagens Microsoft ASP e ASP.NET, inviabilizando a utilização do URL Rewriting para tais tecnologias. Desta forma, foi necessário buscar métodos ou tecnologias para suprir esta necessidade, tendo em vista, que o alvo desse estudo seria o servidor Microsoft IIS (Internet Information Services), por ser o servidor web recomendado para tais linguagens.

Com base na necessidade, foi executada uma busca por aplicações que executassem a tarefa de re-escrita de URLs de forma satisfatória, chegando ao conhecimento das seguintes tecnologias: IIS Rewrite da QwerkSoft (software pago); ISAPI Rewrite da Helicon Tech (software pago); URL Replacer da Motobit.com (software livre); IIRF – Ionic’s ISAPI Rewrite Filter (software livre e com código fonte aberto); e dentre outros não citados.

Dentre este leque de tecnologias, foram adotadas algumas exigências para a seleção do melhor software para a exemplificação neste artigo, dentre elas estão: Utilizar Expressão Regular para filtrar as páginas e parâmetros, se possível semelhante ao do Mod_rewrite; Ser de fácil instalação e configuração; Possuir licença de utilização livre, ou seja, não precisar pagar para utilizar; Tenha uma equipe para corrigir bugs e lançar novas versões, tornando compatíveis com novas versões do IIS; E que funcione corretamente.

Foi escolhido o IIRF dentre todos os outros softwares, por cumprir com todas as exigências impostas.

Antes de iniciar a falar sobre esta tecnologia, só para titulo de conhecimento, é importante frisar que todos os softwares mencionados, são filtros ISAPI’s. Através do ISAPI (Internet Server Application Programming Interface) é possível criar softwares escritos em C++, para filtrar as chamadas de páginas e prover funcionalidades adicionais ao IIS.

Instalando o IIRF

Para iniciar, clique aqui e navegue no site do IIRF para baixar a versão atual (source and binary for v1.2.10) do software, para que seja iniciado o tutorial de instalação.

Após baixar o arquivo “IonicIsapiRewriter-1.2.10.zip”, descompacte-o em qualquer diretório do seu computador. Neste arquivo estão disponíveis todos os códigos fontes do IIRF, que poderá ser alterado e compilado livremente por você (lembrando que você deve saber o que está fazendo) através dos programas Microsoft Visual Studio 2005 ou Microsoft VC++ 2005 Express.

Existem apenas dois arquivos que serão utilizados realmente, que é a DLL (Dynamically Linked Library) do projeto e o arquivo que irá armazenar as instruções de re-escrita. Os dois se chamam “IsapiRewrite4.dll” e “IsapiRewrite4.ini”. Outro arquivo importante que poderá ser complemento a este tutorial, é o “Readme-1.2.txt” que possui todas as informações necessárias para a instalação e configuração do IIRF.

Antes de registramos a DLL no IIS será necessário copiar os dois arquivos para um diretório que o usuário padrão (IUSR_hostname) do IIS tenha permissão de acesso (se não tiver, será necessário dar permissão). É recomendado que seja copiado para o diretório de instalação do ISS, que normalmente é o “c:\windows\system32\inetsrv”. Mas no caso de haver mais de um website configurado no servidor, é importante saber que para cada website (lembrando que diretório virtual não é website) é necessário registrar a DLL no ISAPI e que estas devem estar em diretórios separados para possibilitar a criação de instruções separadas por website. Desta forma, neste tutorial estes arquivos serão colocados em um diretório dentro do website principal (mas fique livre para colocar em qualquer lugar).

Siga os seguintes passos:

Dentro da pasta do website principal, que neste caso é o “C:\Inetpub\wwwroot\” crie o seguinte diretório “BinUrlRewriting” e copie os arquivos “IsapiRewrite4.dll” e “IsapiRewrite4.ini” para dentro do mesmo.

Feito isso, agora será necessário registrar esta DLL no ISAPI do IIS. Abra o IIS através do “Painel de Controle”, “Ferramentas administrativas” e “Internet Information Services”. Clique em “Propriedades” do “Site da Web padrão”.

Clique sobre a aba “Filtros ISAPI”, que irá mostrar todos os filtros instalados, mas que neste momento não existe nenhum. Clique no botão “Adicionar” para inserir o filtro IIRF no website padrão.

Clique sobre a aba “Filtros ISAPI”, que irá mostrar todos os filtros instalados, mas que neste momento não existe nenhum. Clique no botão “Adicionar” para inserir o filtro IIRF no website padrão.

Neste momento, o filtro IIRF foi inserido, mas para que ele possa entrar em funcionamento será necessário reiniciar o IIS. Para isso clique em “Parar item” e depois em “Iniciar item”. Após este procedimento abra propriedades novamente, selecione a aba filtros ISAPI e verá no status uma seta verde, que simboliza o funcionamento do filtro.

Agora o IIS está pronto para colocar em prática o URL Rewriting, em que as instruções de re-escrita irão ficar dentro do arquivo “IsapiRewrite4.ini”, que obrigatoriamente deve estar localizada no mesmo diretório onde a DLL foi instalada.

Na Prática

Foi mostrado até o momento como instalar o filtro IIRF no IIS. Agora será necessário criar as instruções de re-escrita conforme suas necessidades. Neste caso será mostrado um exemplo de como aplicar esta técnica nas linguagens ASP, ASP.NET e PHP.

Será utilizado as seguintes URLs para a criação das instruções, em que para cada URL será informado um parâmetro especifico (ex-aspx, ex-asp e ex-php) que irá identificar qual a página e linguagem que será executada.

http://localhost/ex-aspx/noticia/1234/testando-url-rewriting-no-iis.html|

http://localhost/ex-asp/noticia/1234/testando-url-rewriting-no-iis.html|

http://localhost/ex-php/noticia/1234/testando-url-rewriting-no-iis.html|

Abra o arquivo “IsapiRewrite4.ini”, remova todas as linhas que estiverem dentro e em seguida copie e cole as seguintes instruções.

RewriteRule ^/ex-aspx/noticia/([0-9]+)(/[a-zA-Z0-9_-]+)?(.html)?$ /noticia.aspx?id=$1|

RewriteRule ^/ex-php/noticia/([0-9]+)(/[a-zA-Z0-9_-]+)?(.html)?$ /noticia.php?id=$1|

RewriteRule ^/ex-asp/noticia/([0-9]+)(/[a-zA-Z0-9_-]+)?(.html)?$ /noticia.asp?id=$1|

Veja que a sintaxe é idêntica a utilizada no Mod_rewrite no artigo passado. O código “RewriteRule” inicia uma linha de instrução, posteriormente vem a expressão regular que filtra a chamada da página e por último vem a URL original que será executada, juntamente com seus parâmetros.

Como dito no artigo anterior, é necessário ter experiência em expressões regulares, para poder identificar e filtrar as informações corretas. Neste exemplo, as expressões “^…$ ” indicam o inicio e fim da instrução. O trecho “/ex-aspx/noticia/” identifica a página e o seu tipo (por linguagem), respectivamente. O trecho “([0-9]+)” filtra um valor inteiro, que por estar entre “()” é identificado como um parâmetro ($1), que será utilizado na chamada da página original. Por fim, o trecho “(/[a-zA-Z0-9_-]+)?(.html)?” é opcional, podendo ser utilizado ou não, devido a expressão “?”. Neste momento é importante colocar palavras chaves que destacam o texto, para facilitar a identificação e uma posterior recuperação das informações por mecanismos de busca.

Existem duas coisas que foram detectadas que diferem do Mod_rewrite do Apache, que são: não é necessário ter a linha que inicia (RewriteEngine on) o módulo de re-escrita, porque o arquivo .ini possui unicamente a finalidade de re-escrita; E a outra diferença é que é necessário informar na expressão regular e na URL original o diretório virtual, que neste caso é simbolizado pela “/” no início, que representa o root do website. Isso ocorre basicamente porque o arquivo de configuração é utilizado por todo o website onde o ISAPI foi configurado, incluindo diretórios virtuais, diferente do Mod_rewrite que para cada diretório do website você pode definir instruções diferentes.

Foram criados alguns arquivos exemplos, simbolizando cada linguagem diferente, que pode ser baixado, juntamente com a DLL e INI.

Cada arquivo pega as informações passadas por Query String (id) pela URL original e exibe na tela. Veja o resultado da execução destas páginas.

Execução da página em ASP.NET (utilizando parâmetro ex-aspx):

Execução da página em ASP 3 (utilizando parâmetro ex-asp):

Execução da página em PHP (utilizando parâmetro ex-php):

Viu a simplicidade em utilizar, através do IIRF, várias páginas codificadas em linguagens diferentes ao mesmo tempo, tornando transparente para o usuário do site, qual tecnologia ou estrutura de arquivos estão sendo utilizados. Essa é uma das características boas da técnica URL Rewriting, que foram mais bem explicadas no artigo anterior.

E Por Fim

O foco deste artigo foi mostrar que também é possível executar a técnica de URL Rewriting no servidor web IIS, possibilitando a utilização de outras linguagens como ASP e ASP.NET. Viabilizando assim, que sua aplicação web também desfrute das vantagens do URL Rewriting, que é a possibilidade de criar URLs mais seguras, apresentáveis, acessíveis e conseqüentemente mais competitivas.

Obrigado pela leitura e em caso de dúvidas, estarei disponível para ajudá-lo (a) na medida do possível. E aguarde novos artigos.

Referências

URL Rewriting: Criando URLs competitivas!

http://www.imasters.com.br/artigo/5382/webstandards/url_rewriting_criando_urls_competitivas/

IIS

http://cheeso.members.winisp.net/IIRF.aspx

http://www.qwerksoft.com/products/iisrewrite/

http://www.isapirewrite.com/

http://www.motobit.com/help/url-replacer-rewriter/iis-mod-rewrite.asp

ISAPI

http://en.wikipedia.org/wiki/ISAPI

Expressão Regular

http://guia-er.sourceforge.net/

É isso, espero que tenham gostado. Até a próxima!