Težava s 301 redirecti

Preusmeriti želim staro spletno trgovino, ki se nahaja na www.staradomena.com na novo spletno trgovino, ki se nahaja na www.novadomena.com, vendar mi nikakor ne uspe doseči želenega rezultata, saj sta osnovani na popolnoma različnih sistemih in so zato tudi URL-ji posledično povsem drugačni.

Naj podam primer za preusmeritev enega artikla:

http://www.staradomena.com/izdelki.php?cat1=prva_kategorija&kat=podkategorija_ena&art=primer_artikla
----->
http://www.novadomena.com/primer_artikla

Podobno bi moral narediti za večino ostalih artiklov, vendar ne za popolnoma vse. Preostanek, ki ne bi bil točno definiran, bi se moral preusmeriti na

http://www.novadomena.com/index.php?route=domov

Po dolgotrajnem Googlanju mi je končno uspelo najti kodo, ki je kompatibilna tudi s posebnimi znaki iz stare spletne trgovine in dejansko deluje:

RewriteCond %{QUERY_STRING} ^cat1=prva_kategorija&kat=podkategorija_ena&art=primer_artikla$
RewriteRule ^izdelki.php$ http://www.novadomena.com/primer_artikla [R=301,L]

Vse lepo in prav, vendar ko želim preusmeriti preostanek povezav, ki niso definirane z zgornjim pravilom, zadeva ne deluje več tako, kot bi morala:

RewriteCond %{HTTP_HOST} ^staradomena\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.staradomena\.com$
RewriteRule ^izdelki\.php$ "http\:\/\/www\.novadomena\.com\/" [R=301,L]

Po preusmeritvi namreč dobim takle URL:

http://www.novadomena.com/primer_artikla?cat1=prva_kategorija&kat=podkategorija_ena&art=primer_artikla

Pozna morda kdo kakšno rešitev?

16 odgovorov

Ampak tale koda najbrž preusmeri vse povezave, ki vsebujejo "&art=" na http://www.novadomena.com/, kajne?
Kako bi pa to apliciral za posamične izdelke? Npr.

http://www.staradomena.com/izdelki.php?cat1=cokolade&kat=mlecnecokolade&art=milka100g
----->
http://www.novadomena.com/milka_100g

http://www.staradomena.com/izdelki.php?cat1=cokolade&kat=mlecnecokolade&art=gorenjka300g
----->
http://www.novadomena.com/gorenjka_300g

itd.?

Sej bo prekopiral ID izdelka, direktiva bo veljala za vse povezave kjer je na koncu &art=nekidizdelka
Če se pojavlja še kdaj vmes pa bi moral dati tako:

RewriteRule ^izdelki.php\?.*&?art=([a-z0-9_]*)&? http://www.novadomena.com/$1 [NC,R=301,L]

(Aja RewriteCond ne rabiš...)
Malo šlamasto napisano, uri primerno, ampak bi moglo delati

Joj pardon, pozabil sem omeniti, da ni nujno, da bodo imena artiklov enaka. Torej tvoja rešitev je super, če je ime artikla na stari in na novi spletni trgovini enako, kaj pa v primeru, če ni?

Ja pol boš pa moral na roke napisati vse take primere... Če boš pa izdelke v novo bazo uvozil tako, da imaš pri vsakem izdelku tudi stari ID, pa to lahko storiš tudi v PHPju z header() 301 redirectom

Tukaj res odpade avtomatiziran proces, zato bom mogel res vse na roke vnašati. Deloma pa bi mi olajšalo, če bi pravila delovala tako, kot sem že omenil na prejšnji strani. Torej poglejva si še enkrat ta primer:

http://www.staradomena.com/izdelki.php?cat1=cokolade&kat=mlecnecokolade&art=milka100g
----->
http://www.novadomena.com/milka_100g

Želel bi, da se preusmerijo vse povezave iz www.staradomena.com, ki vsebujejo "art=milka100g", na http://www.novadomena.com/milka100g

Pri tem bi bilo potrebno upoštevati "art=milka100g" in ne samo "art=". Razlog, da želim le delno ujemanje, je v tem, da je npr. milka100g dodana v več različnih kategorij in podkategorij, zato se lahko pojavijo različni "cat1=" in "kat=" za en posamičen izdelek in je potrebno zato po nepotrebnem potrebno vnesti več redirectov. Če bi pravilo upoštevalo le atribut "art=milka_100g", bi s tem ignoriral vse kategorije in podkategorije, zato ne bi imel večkratnega dela.

No sej kaj pa sem jaz napisal.

# specifični redirecti
RewriteRule ^izdelki.php\?.*&?art=milka_100g&? http://www.novadomena.com/milka_100g_nova [NC,R=301,L]
RewriteRule ^izdelki.php\?.*&?art=gorenjka_300g&? http://www.novadomena.com/gorenjka_300g_nova [NC,R=301,L]
# vsi ostali izdelki ki imajo enak id tako na starem kot na novem siteu padejo pod tole:
RewriteRule ^izdelki.php\?.*&?art=([a-z0-9_]*)&? http://www.novadomena.com/$1 [NC,R=301,L]
1