Quando comecei com meu blog, os permalinks e a seguinte estrutura:
http://<domain>/%year%/%monthnum%/%day%/%postname%/
Algum tempo atrás, eu mudei a estrutura do permalink para "http://<domain>/%postname%/
" apenas.
Para lidar com os links externos para a estrutura permalink antiga, adicionei a seguinte linha no meu arquivo htaccess:
RedirectMatch 301 /([0-9]+)/([0-9]+)/([0-9]+)/(.*)$ http://<domain>/$4
Agora, o problema é que a linha de redirecionamento quebra os links do arquivo, por exemplo. "http://<domain>/2010/09/02
" é redirecionado para a primeira página em vez de mostrar as postagens de 2 de setembro de 2010.
É possível corrigir a diretiva de redirecionamento no htaccess, ou eu não vou poder comer o bolo e tê-lo também?
RedirectMatch de Mod_Alias não é tão poderoso quanto Mod_Rewrite. Se você tiver Mod_Rewrite no seu Host (Pretty Permalinks use-o, por exemplo), você poderá fazer o redirecionamento somente se o URL não estiver no formato de link do arquivo.
Para testar esse caso, há RewriteCond
e para fazer o comando de redirecionamento, existe o RewriteRule ... [R=301]
diretiva.
Um exemplo baseado em seus dados:
RewriteCond %{REQUEST_URI} !^/((20|19)[0-9]{2})/([0-9]{2})/[0-9]{2}$ [NC]
RewriteRule ^/([0-9]{4})/([0-9]{2})/([0-9]{2})/(.*)$ http://<domain>/$4 [R=301,L]
Isso não foi testado, mas acho que deveria fazer o trabalho. Eu usei o quantificador ({2}) para especificar melhor quantos números você espera. Ao lado disso, no RewriteCond eu criei um padrão que combina apenas com os 20 .. e 19 .. anos.
A primeira linha (a condição, RewriteCond
) verifica se não corresponde a uma URL de arquivamento e, somente se não corresponder, a regra para fazer o redirecionamento será executada. O RewriteRule
basicamente faz o mesmo que a sua diretiva RedirectMatch
.