2017-05-21 23 views
7

301 yönlendirmeleri ve htaccess ile ilgili bir sorunu gidermek için uğraşıyorum. Bir siteyi eski alandan yeni bir alana taşıdım. Ve bunu 301 yönlendirmesiyle başarıyla yapmayı başardım. böylece gibi: eski site çocuk kategorilerinde OnURL üst düzey kategorileri url

Redirect 301/https://newdomain.com 

URL'lerin yüzden gibidir:

olddomain.com/product-category/parent-cat1/parent-cat2/child-cat 

veya

olddomain.com/product-category/parent-cat1/child-cat 

veya

olddomain.com/product-category/child-cat 

yeni sitede Oysa onlar :

Ne yazık ki, bu, yönlendirmelerden 404s sonuçlanır. Ana kategorileri (adlarına ve miktarına göre değişebilir) URL'den kaldırmanın herhangi bir yolu var mı? Herhangi bir tavsiye için şimdiden

sayesinde, şerefe

aşağıdaki RedirectMatch direktifi mevcut Redirect direktif önce dahil
+1

"/ ebeveyn-kedi/ebeveyn-kedi /" - Bu iki örnekte 'ebeveyn-kedi' aynı mı? Yoksa bu gerçekten/ebeveyn-cat1/parent-cat2/'? 'Ana-kedi' sayısının 1'den 1'e kadar değişebileceğini mi söylüyorsunuz? Hangi karakterler "ürün kategorisi" ve "çocuk-kedi" nin bir parçası? – MrWhite

+0

Daha açık olmamak için üzgünüz. Hayır, farklı ana kategoriler olacaklardı. Bunu açıklığa kavuşturmak için soruyu düzenleyeceğim. Ürün kategorilerinin ne kadar uzağa yerleştirilebileceği konusunda bir sınırlama yoktur, ancak pratik olarak 5 veya 6 seviyeden fazla değildir. Alfasayısal karakterler ve kısa çizgiler.Teşekkürler – noelmcg

cevap

6

Dene:

RedirectMatch 302 ^/([\w-]+)/(?:[\w-]+/)+([\w-]+)$ https://newdomain.com/$1/$2 

RedirectMatch direktif Redirect yönergesi tamamlayıcısıdır, birer parçası mod_alias. RedirectMatch yönergesi dışında, URL yolu eşleşmesi için regex kullanır, Redirect ise basit önek eşleşmesi kullanır.

Bu varsayar yol parçaları (yani. "Ürün kategorisi", "ebeveyn-cat" ve "çocuk kedi") sadece karakterden oluşmalı a-z, A-Z, 0-9, _ ve - (tire). Bu, "çok fazla" eşleşmemesi için mümkün olduğunca spesifik olmalıdır. Bir veya daha fazla "ebeveyn-kedi" gereklidir.

$1, desen desenindeki ilk yakalanan gruba bir geri tepkisidir. yani. ([\w-]+), ürün kategorisi. Ve $2, ikinci yakalanan gruba bir geri tepedir, yani. model, çocuk kedisi'un sonunda ([\w-]+). Ortadaki (?:....) "grup", yakalamayan bir gruptur, dolayısıyla buna uygulanan bir geri tepme yoktur.

Bu bir 302 (geçici) yönlendirmedir. Sadece 301 çalışıyorsa bunu değiştirin. Tarayıcı tarafından önbelleğe alınmadıklarından 302s ile test etmek daha kolaydır. Sonuç olarak, tarayıcı önbelleğinin testten önce açık olduğundan emin olmanız gerekir.

+1

Teşekkür @ user82217. 302'ye göre başa çıkmak için alkışlar, bunu hiç bilmiyordum. Şu anda iyi çalışıyor gibi görünüyor, biraz daha fazla test yapmak gerekiyor. – noelmcg

+0

Sorunları karmaşıklaştırmak için sitenin bir alt dizinde olduğunu belirtmedim, ancak bu işe yaradı: RedirectMatch 302 ^/sub-dir/([\ w -] +)/(?: [\ W -] + /) + ([\ w -] +) $ https://newdomain.com/$1/$2 – noelmcg

+0

Site bir alt dizinde bulunuyorsa bu yeterli olmalıdır. Yani, muhtemelen mevcut 'Yönlendirme' yönergeleriniz gerçekten şöyle bir şeydir: 'Redirect 301/alt yol https: // newdomain.com'? – MrWhite