Autor Zpráva
James22
Profil *
Nedavno jsem si zaridil SEO adresy pomoci htaccessu, ale mam problem: funguji jak SEO adresy, tak ty stare adresy. Nejlepsi bude to ukazat na konkretnim prikladu:

Mam dve adresy:
/index.php?clanek=22 (puvodni adresa)
/clanek-22-zakladni-info (nova SEO adresa)

Obe jsou funkcni. Jak ale udelat, aby byla funkcni jen ta nova (/clanek-22-zakladni-info) a ta stara (index.php?clanek=22) aby presmerovavala na tu novou?

Takto vypada muj htaccess:

RewriteEngine On
RewriteRule   ^clanek-([0-9]{1,3}).*$    /index.php?clanek=$1 [L,QSA]


V napovede redakcniho systemu, ktery pouzivam (RS2) je k tomu napsano jen toto: "Problém článků je ten, že se nikam nevkládají odkazy na ně. Když autor napíše článek, tak potom někam vloží manuálně odkaz na něj. Kdyby odkazy tvořil systém, samozřejmě že bude hezké adresy podporovat, ale takhle je to na autorovi. Bude-li důsledně všechny adresy článků psát ve tvaru
web.cz/clanek-25-maly-letni-vylet.html
a do
.htaccess
souboru si přidá direktivu
RewriteRule    ^clanek-([0-9]{1,3}).*$    index.php?clanek=$1 [L,QSA]
, pak mu bude vše hezky fungovat."

O presmerovani tam ale nic neni.

Muzete mi prosim pomoci?
Mastodont
Profil
Jak ale udelat, aby byla funkcni jen ta nova (/clanek-22-zakladni-info) a ta stara (index.php?clanek=22) aby presmerovavala na tu novou?
Nemůžeš nikomu zakázat zapsat do adresního řádku tu starou adresu. Za normálních podmínek čtenář tu starou adresu ovšem nezná, protože všude jsou linky jen na tu "pěknou". A stará adresa rozhodně nemá nikam přesměrovat, to je adresa, která je interně použita pro určení obsahu, který má být vypsán.
James22
Profil *
Aha. Takze to proste nejde presmerovat. Tak nic. Diky za rychlou odpoved a vysvetleni.
dgx
Profil
Určitě je vhodné původní adresy přesměrovat HTTP kódem 301 na nové.

Teoreticky by se dal využít .htaccess. Přes RewriteRule sice není možné operovat s query stringem, ale dalo by se to nahradit pomocí

RewriteCond   %{QUERY_STRING} ^clanek=(.*)


a pak se na proměnnou odkázat přes %1. Jenže v tvém konkrétním případě je jiný problém - v nové adrese máš víc informací, než ve staré. Je tam navíc např. řetězec 'zakladni-info' a ten nelze v .htaccess nijak (snadno) vymyslet. Takže nezbývá než přesměrovat přes PHP.

Na straně PHP si musíš nejprve zjistit, jestli člověk přišel přes staré nebo nové URL (to prozradí řetězec v $_SERVER['REQUEST_URI']) a pokud přes staré, sestavíš novou adresu a na tu přesměruješ funkcí header(). Je důležité po volání header() ještě zavolat explicitně exit.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: