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

S tem "primer_artikla" si me čisto zmedel, skopiraj še celotno nespremenjeno kodo (samo domeno spremeni)

Drugače mi deluje kot da bi imel QSA (query string append) direktivo, vendar je iz te kode ne vidim.

Namesto "primer_artikla" je sicer ime artikla, recimo:

http://www.staradomena.com/izdelki.php?cat1=cokolade&kat=mlecne_cokolade&art=milka_100g

ali

http://www.staradomena.com/izdelki.php?cat1=hrana&kat=cokoladne_ploscice&art=snickers_60g

Na novi spletni trgovini (Opencart) so pa URL-ji SEO, torej:

http://www.novadomena.com/milka_100g

ali

http://www.novadomena.com/snickers_60g

Je zdaj bolj razumljivo ali še kaj obrazložim?

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

v .htaccess pa napišeš:

Options +FollowSymlinks
RewriteEngine on
RewriteRule ^izdelki/([^/]+)/([^/]+)/([^/]+).html /izdelki.php?cat1=$1&kat=$2&art=$3 [NC]

Pri tem pa moraš paziti na duble content tako moraš odstraniti ali spremeniti vsebino, ki jo prikazuješ na novi domeni.

1

V novi spletni trgovini so povezave kar takšne, kot sem napisal v zgornjem primeru, torej:
http://www.novadomena.com/milka_100g

Sem pa podal le en primer povezave za specifičen artikel, moram še poudariti, da niso vse povezave takšne, saj niso vse SEO. Recimo primer za preusmeritev ene kategorije s čokoladami:

http://www.staradomena.com/izdelki.php?cat1=hrana&kat=cokolade
------>
http://www.novadomena.com/index.php?route=product/category&path=19

Ker je tukaj [L]
RewriteRule ^izdelki.php$ http://www.novadomena.com/primerartikla [R=301,L]
Bi se zadeva morala končati tukaj in vse naslednje direktive ne morejo imeti vpliva.
Kako točno te sedaj moti tista zadeva na koncu (splošni rewrite) ne vem, za odstranjevanje query parametrov pa se uporablja ? na koncu
RewriteRule ^izdelki.php$ http://www.novadomena.com/primer
artikla? [R=301,L]
Če nimam celotne kode pred sabo ne dojemam lih 100%, ampak se mi zdi da ti 2x redirecta (to lahko opaziš tudi v dev toolsu, če daš persist across requets).

1

SlimDexlue, motilo me je zato, ker artikli enostavno niso bili redirectani na pravi URL. Z "?" na koncu pa sedaj res deluje tako, kot sem si želel, vsaj na prvi pogled, tako da hvala. Upam, da bo ta trik deloval tudi pri ostalih povezavah.
Kje pa vklopim ta persist across requests? Se da še na kak način preverit, da bo takšna preusmeritev Googlu zagotovo všeč?
Preusmeritev sem preveril tudi s petimi redirect checkerji in povsod zgleda v redu.

1

V Chromu, v zavihku Network je prvi gumb ena bunka "Preserve log upon navigation" in še v filtru omejiš na Documents, da bo bolj jasno.

1

Hvala, bom preizkusil in javim. Med tem pa sem opazil, da imajo na stari spletni trgovini artikli podvojene URL-je, če so dodani v različne kategorije, tudi Google jih je zelo čudno poindeksiral (dejansko s povezavo na "dodaj v košarico"), zato bi bilo bolje, da bi zaobjel vse hkrati, in sicer tako, da bi jih preusmeril glede na parameter "art=".

Torej, če si pogledava en 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
Kako bi to najlažje storil?

Če dobro vidim ti kategorije sploh ne uporabiš nikjer, zato bi rekel da kar takole...

RewriteCond %{QUERY_STRING} &art=(.*)$
RewriteRule ^izdelki.php$ http://www.novadomena.com/$1 [R=301,L]
1

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.?