Meus queridos, Blog com engine novo, vida nova! E mantendo o mote de postar dicas que já me foram úteis em alguma parte de minha carreira de TI, segue uma que utilizei principalmente para estes blogs!

Quando do desenvolvimento do novo CMS do NeoMatrix Tech (e Light, e futuros blogs dedicados já que o mesmo é multisite) necessitei, para não perder os links em mecanismos de busca, manter o mesmo padrão de URL que utilizava no site estático. Mais ou menos assim: http://leonelfraga.com/neomatrixtech/posts/aaaa/mm/titulo-formatado.html

Agora todo o conteúdo é gerenciado por apenas duas páginas .aspx, sendo uma que gera os índices de posts e outra que apresenta o post em si. Estas páginas recebem certos parâmetros, e convenhamos, isso não é nada amigável para o mecanismo de busca.

Logo pensei que deveria usar reescrita de URL no Servidor Web. Dito e feito, instalei o módulo URL Rewrite do IIS 7 e configurei as expressões regulares de acordo com o que eu necessitava e funcionou certo, mas (sempre tem um mas) na hospedagem funcionava o ISAPI Rewrite 3. Ferrou, e agora?

Dando uma pesquisada por aí, vi que para que eu precisava converter a regra entre os dois componentes é simples. A sintaxe dos dois é bem diferente (um é confugurado via XML e o outro via arquivo htaccess), porém posso utilizar a mesma expressão regular apenas modificando os "placeholders" dos parâmetros.

Vamos ver com um exemplo:

- IIS 7 URL Rewrite (web.config):

...
    <system.webServer>
        <rewrite>
            <rules>
              <rule name="NeoMatrix Light Index">
                  <match url="(meusite)/?([0-9]+)?/?$" />
                  <action type="Rewrite" url="/PaginaIndice.aspx?site={R:1}&amp;modo=indice&amp;pagina={R:2}" />
              </rule>
			</rules>
		</rewrite>
	</system.webServer>
...

- .htaccess ISAPI Rewrite 3

RewriteEngine on
RewriteRule (meusite)/?([0-9]+)?/?$ /PaginaIndice.aspx?site=$1&modo=indice&pagina=$2 [NC]

Converter entre as duas sintaxes é simples, vamos fazer escrever o .htaccess a partir do URL Rewrite:

- Inicie com o comando RewriteEngine on, apenas uma vez
- Para cada regra, utilize em cada uma o comando RewriteRule, seguido da expressão regular contida na tag <match> do web.config, dê um espaço e preencha com o padrão escrito no atributo "url" da tag <action>. Substitua os "placeholders" dos grupos, entre chaves ({R:0}, {R:1}, assim por diante) por "$1", "$2", assim por diante. Note que no arquivo web.config o caracter "& (e comercial)" é escapado com &amp; e no htaccess não é necessário escapar esse caracter, portanto, faça a substituição. Note que fizemos isso somente para o action "rewrite", que é o escopo deste artigo.

Simples, não!