2009-08-11 20 views
17

Bir müşteri için yeni bir PHP sitesi oluşturdum ve en üst sıradaki Google sonuçlarını eski site yapısından yenisine yönlendirmek istiyorum.Apache Redirect 301, GET parametresi kullanılırken başarısız olur, örneğin? Blah =

Birkaç düzine Redirect 301'i belge köküne bir .htaccess koymuştum ve bazıları iyi çalışırken başkaları ile sorun yaşıyorum.

Bu çalışıyor: Bu işe yaramazsa

Redirect 301 /nl/flash/banner_new.swf http://www.example.com/actueel/nieuws.html?action=show&f_id=152 

!

Redirect 301 /nl/index.php?mID=24511&subID=0 http://www.example.com/solutions/printsolutions.html 
Redirect 301 /nl/index.php?mID=24512&subID=0 http://www.example.com/support/koppeling-met-omgeving.html 

yönlendirmeleri .htaccess dosyasında karıştırılır ve GET parametreleri ile sadece yönlendirmeleri başarısız görünmektedir: (yönlendirme basitçe atlanır beri 404 giden).

Bir çözüm var mı? Başarısız yönlendirmeleri göz ardı etmek, müşterinin bir seçeneği değildir. Düşüncelerin için teşekkürler.

cevap

15

Gumbo's answer's muhakeme doğru iken, onun RewriteRule işe alamadı.

Başka bir RewriteCond eklemek bunu yaptı. Aşağıdaki test edildi ve iyi çalışıyor.

RewriteCond %{REQUEST_URI} /nl/index.php$ 
RewriteCond %{QUERY_STRING} ^mID=24511&subID=0$ 
RewriteRule ^.*$ http://www.example.com/solutions/printsolutions.html [L,R=301] 
+2

'RewriteRule' için asıl kalıp, sunucu yapılandırmasında veya .htaccess dosyasında ve .htaccess dosyasının bulunduğu konumlarda kullanılmasına bağlıdır. – Gumbo

12

Redirect sadece URL yollarında işliyor:

eski URL yolu eğik çizgi ile başlayan bir harf duyarlı (% imlemesi çözüldükten sonra) yoludur. [...]

Yani URL sorgu (sonraki ilk # kadar ilk ? sonraki kısım) kontrol edilmez.

Ama bunu yapmak mod_rewrite kullanabilirsiniz:

RewriteCond %{QUERY_STRING} ^mID=24511&subID=0$ 
RewriteRule ^nl/index\.php$ http://www.example.com/solutions/printsolutions.html [L,R=301] 
RewriteCond %{QUERY_STRING} ^mID=24512&subID=0$ 
RewriteRule ^nl/index\.php$ http://www.example.com/support/koppeling-met-omgeving.html [L,R=301] 
12
hem Bamya en ve Martijn en cevapları ile mutabık kalarak

... ama:

RewriteCond %{REQUEST_URI} ^/nl/index.php$ 
: Martijn en içinde

Tipo, "^" REQUEST_URI durum için normal ifadeyi başlatmak için gereken olmalıdır

Ben de .htaccess dosyamın çalıştığı yer olan Gumbo's değil, sadece Martijn'leri alabiliyordum.

Ayrıca, parametre dizesinin yeniden yazılarak iletilmesini istemiyorsanız, "?" URL'nin sonuna tarih: Martijn koduna aşağıdaki Aksi

RewriteRule ^.*$ http://www.example.com/solutions/printsolutions.html? [L,R=301] 

, bu URL /nl/index.php?mID=24511 & ise" okur subid sonra 301 Kalıcı yönlendirme ile http://www.example.com/solutions/printsolutions.html?mID=24511&subID=0 yönlendirme = 0 üstbilgi ve bu URL üzerinde daha fazla kural işlemez "

Bu, sizin istediğiniz gibi olabilir veya olmayabilir ve parametreler anlaşılmamışsa basitçe herhangi bir zarar vermeden yok sayılacaklar. Muhtemelen önemli değil.Ancak, bir insanı yeni bir sayfaya yönlendirmek ve "güzel URL'ler" istiyorsanız, parametre dizisini çıkarmak tercih edilir, bu nedenle "?" hedef URL’nin sonunda.

+0

Varsayılan olarak nasıl büyük harf çıkarılacağı GET string parametre geçişi "?" sonunda imzala ... onu arıyordu. –

+1

? Yorum bu yazıya büyük bir ekleme. –

İlgili konular