2011-10-15 21 views
5

Basit olması gereken bir şey bulmakta zorluk çekiyorum. Bir dizindeki her şeyi 301 yeni bir konumda tek bir dosyaya yönlendirmek istiyorum. Benim .htaccess yılındaBir Dizinden Tek Dosyaya 301 Yönlendirmesi

, zaten şu ...

Redirect 301 /myDir/ http://www.mydomain.com/myNewDir/index.html 

ve bu ...

Redirect 301 /myDir/ http://www.mydomain.com/myNewDir/ 

ve bu ... denedim

Redirect 301 /myDir http://www.mydomain.com/myNewDir 

sorunu, bunların her birinin yalnızca 01 içinde her dosyayı eşleştirmesidirve onu hedef URL’nin sonuna ekleyerek.

Googling sonra ben bunu yapmak söz konusu şey ...

Redirect 301 ^/myDir(.*) http://www.mydomain.com/myNewDir 

gördüğünü Ama bu sadece o URL'nin sonuna mevcut dosya konumunu haritalama ediyor ... aynı şeyi yapar.

O sürü bulmak kolay oldu çevrimiçi öğreticiler "yönlendirme .htaccess" ama onlar sadece 'bire-bir dosya eşleme' ya da 'bire-bir dizin haritalama' gibi bariz örnekler göstereceğiz görünmektedir. Bu öğreticiler aynı zamanda çeşitli ilgili dosya direktiflerini ve bunları nasıl kullanacaklarını açıklamayı ihmal ediyor gibi görünmektedir.

Bu özel barındırma hesabı çöp ve ayrıca FrontPage eklentileri yüklüdür. Mod yeniden yazma başarısız olur (tüm siteyi bozar), ancak Redirect 301 satırları düzgün çalışıyor. Bu yeni (FrontPage olmayan) siteyi daha sağlam bir barındırma hesabına taşıyabileceğim kadar Redirect 301 tek liner ile bağlı kalmam gerekecek.


Sadece bir Redirect 301 /myNewDir/index.html bulunan aynı tek bir dosya için /myDir/ içinde herşeyi yönlendirmek için nasıl kullanabilirim

? (Mümkünse sadece /myNewDir/ kullanmayı tercih ederim). Lütfen çözümünüzde kullanılan dosya direktiflerini detaylı bir şekilde açıklayınız.


GÜNCELLEME:

Önceden kabul cevap çalışmıyor.

Örnek:

RedirectMatch 301 /myDir1/(.*) http://mydomain.org/newpath/myDir1/index.html 

... veriyor bir hatası "Çok fazla yönlendirme açmaya çalışırken meydana geldi."

hedef URL /myDir1/ yerde değil, sadece kök, bu kötü bir döngüye yönlendirilir alacak içeriyorsa bu yüzden /myDir1/(.*) dize içinde yerIere eşleşen olmasıdır.

Doğru çözüm için kendi gönderdiğim yanıtıma bakın.

RedirectMatch 301 /myDir/.* http://www.mydomain.com/myNewDir/index.html 

Referans:

cevap

12

da kullanılabilir. Eski projemden birinde cevabı buldum. Bunun için yanlıştır. Bunun yerine RedirectMatch 301 istedim.

RedirectMatch 301 ^/myDir/(.*) http://www.mydomain.com/myNewDir/ 

Açıklama (ler):

http://httpd.apache.org/docs/1.3/mod/mod_alias.html#redirectmatch

"Bu yönerge yönlendir eşdeğerdir, ancak bunun yerine basit önek eşleşmek standart düzenli ifadeler kullanan" http://www.zytrax.com/tech/web/regex.htm

"köşeli parantez dışında^(inceltme veya düzeltme) dize1, örneğin,^kazanın bulamazsınız hedef dizenin başında sadece Windows'u bakmak demektir ama^Moz Mozilla'yı bulacaktır. "

ve ...

". (Nokta) örneğin bu pozisyonda herhangi bir karakter (ler), ton anlamına gelir. Ton sesi ve tonneau ancak, hafifmeşrep bulacaksınız çünkü aşağıdaki karakter . "

ve ...

* (yıldız veya yıldız) önceki karakterle eşleşir 0 veya kez, örneğin, ağaç (2 kez) bulmak ve yürünecek olacak tre daha (1 kez) ve yalak (0 kez). *

+0

Güzel teşekkür ederim. Bu beni delirtmeye başladı. Bu, tüm bir dizinin (içerideki her sayfa) içeriğini belirli bir sayfaya yönlendirmek için çalışır. – Tom

+0

Ayrıca, daha önce 301 yönlendirme yanlış yere gittiyseniz (sayfanın hedef URL'ye eklenmesi), tarayıcınızın önbelleğini .htaccess'ten yeni kuralı almadan önce temizlemeniz gerekebilir. – Russ

1

bu deneyin http://httpd.apache.org/docs/1.3/mod/mod_alias.html#redirectmatch.

Bildiğim kadarıyla parantez etrafında. * Endişe RedirectMatch sen eşleşti karakterleri yakalamak ve düzenli vb $ 1, $ 2,

olarak refferencing yeniden yönlendirme kuralında kullanabilirsiniz anlamına gelir standart normal ifadeler kullandığı ifadeler *, önceki karakterin herhangi bir sayıda tekrarı anlamına gelir. . - herhangi bir karakteri gösterir. Yani kombinasyon. * Bu desenin herhangi bir karakterle eşleştiğini söylüyor. Dolayısıyla *. * Bu kalıbın/myDir ve/myDir/ile ve /myDir/test.html ile eşleşeceği anlamına gelir. Yani * . *

+0

Evet, işe yarıyor. Biliyorum '' '' 'tüm dosyalar ile eşleşir. Ama bunun üzerine genişletebilir misin? Varyasyon var mı? Neden (? *) 'De çalışıyor? Bu çevrimiçi belgelere bir bağlantı? Teşekkür ederim! – Sparky

+0

Bkz. Http://httpd.apache.org/docs/1.3/mod/mod_alias.html#redirectmatch Köşeli parantezler hakkında.* RedirectMatch standart normal ifadeler kullanır, bu da eşleşen karakterleri yakalayabilmeniz ve bunları 1 $, 2 $, vb. Olarak yeniden yönlendiren yönlendirme kuralınızda kullanabilmeniz anlamına gelir. – dfsq

+0

Düzenli ifadelerde *, önceki karakterin herhangi bir sayıda tekrarı anlamına gelir. '.' - herhangi bir characher gösterir. Yani kombinasyon. * Bu desenin herhangi bir karakterle eşleştiğini söylüyor. Dolayısıyla *. * Bu kalıbın/myDir ve/myDir/ile ve /myDir/test.html ile eşleşeceği anlamına gelir. Yani * . * Ayrıca kullanılabilir. – dfsq

İlgili konular