web-development-kb-pt.site

Mudança de estrutura de permalink - redirecionamentos no htaccess quebram os links do arquivo

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?

2
TFM

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.

2
hakre