it-swarm.dev

Změna struktury permalink - přesměrování v htaccess přeruší archivní odkazy

Když jsem začal s mým blogem, permalinky a následující struktura:

http://<domain>/%year%/%monthnum%/%day%/%postname%/

Před nějakou dobou jsem změnil strukturu permalink pouze na "http://<domain>/%postname%/".

Abych vyřešil externí odkazy na starou strukturu permalinků, přidal jsem do svého souboru htaccess následující řádek:

RedirectMatch 301 /([0-9]+)/([0-9]+)/([0-9]+)/(.*)$ http://<domain>/$4

Problém je v tom, že přesměrovací linka rozbije archivní odkazy, např. "http://<domain>/2010/09/02" je přesměrováno na úvodní stránku namísto zobrazení příspěvků od 2. září 2010.

Je možné opravit směrnici přesměrování v htaccess, nebo nebudu schopen jíst dort a mít ho taky?

2
TFM

RedirectMatch Mod_Alias ​​není tak silný jako Mod_Rewrite. Pokud máte Mod_Rewrite na vašem Hostu (Pretty Permalinks ho využijí například), můžete přesměrování provést pouze v případě, že adresa URL není ve formátu odkazu Archiv.

Chcete-li pro tento případ otestovat, existuje RewriteCondNAME _ a příkazem přesměrování je RewriteRule ... [R=301] směrnice.

Příklad založený na vašich datech:

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]

To je nevyzkoušené, ale myslím, že by to mělo dělat. Použil jsem kvantifikátor ({2}), abych lépe specifikoval, kolik čísel očekáváte. Vedle toho jsem v RewriteCondu vytvořil vzor, ​​který odpovídá pouze 20 .. a 19 .. letům.

První řádek (podmínka, RewriteCondname__) zkontroluje, zda neodpovídá archivní URL, a pouze v případě, že není uzavřena, bude provedeno pravidlo, které má provést přesměrování. RewriteRuleje v podstatě stejný jako direktiva RedirectMatchname__.

2
hakre