2013-04-04 14 views
5

Próbuję przekierować przy użyciu .htaccess w następujący sposób. Nie jestem wszystkim zaznajomiony z .htaccess, więc nie jestem pewien, czy da się to zrobić. Ponadto nie wiem, czy zamierzam to zrobić, stosując najlepsze praktyki dotyczące SEO.Jak przekierować poddomeny, które nie istnieją?

www.domain.com    > domain.com 301 

ks.domain.com     > kansas.domain.com 301 

ia.domain.com     > iowa.domain.com 301 

domain.com/sites    > domain.com 301 

domain.com/sites/iowa   > iowa.domain.com 301 

nonexistent.domain.com  > domain.com 302 

domain.com/sites/nonexistent > domain.com 302 

Moje największe pytanie dotyczy wykrycia nieistniejącej subdomeny i przekierowania. Chciałbym zobaczyć, jak wszystkie powyższe są osiągnięte.

+2

@ Johnsonmk2 Co jest jasne, o przyjętym odpowiedź? – Sumurai8

+0

Przypuszczam, że według "nie istnieją", oznacza to, że subdomeny istnieją, ale nie ma dla nich odpowiednich witryn, prawda? –

+0

Tak, Alexis. Chodzi o to, że jeśli przekażę wszystkie '* .domain.com' do' domain.com/* ', wykryję, że ten folder (witryna) nie istnieje, a następnie przekieruj do' domena.com'. Przyjęta odpowiedź była dość szczegółowa, jak to zrobić. – TheHerk

Odpowiedz

7

Najpierw należy dodać subdomenę z symbolami wieloznacznymi poprzez utworzenie subdomeny o nazwie *, tylko jeśli umożliwia to usługodawca internetowy. I to musi być w .htaccess, starają się go przetestować, aby sprawdzić czy działa:

Options +FollowSymlinks 
RewriteEngine on 

RewriteCond %{HTTP_HOST} ^www\.domain\.com 
RewriteRule ^(.*)$ http://domain.com/$1 [R=301] 

RewriteCond %{HTTP_HOST} ^ks\.domain\.com 
RewriteRule ^(.*)$ http://kansas.domain.com/$1 [R=301] 

RewriteCond %{HTTP_HOST} ^ia\.domain\.com 
RewriteRule ^(.*)$ http://iowa.domain.com/$1 [R=301] 

RewriteCond %{HTTP_HOST} ^domain\.com 
RewriteCond %{REQUEST_URI} ^/sites/?$ 
RewriteRule ^(.*)/[R=301] 

RewriteCond %{HTTP_HOST} ^domain\.com 
RewriteCond %{REQUEST_URI} ^/sites/iowa/?$ 
RewriteRule ^(.*) http://iowa.domain.com/ [R=301] 

RewriteCond %{HTTP_HOST} ([a-z0-9-]+)\.domain\.com$ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*) http://domain.com/ [R=302] 

RewriteCond %{HTTP_HOST} ^domain\.com 
RewriteCond %{REQUEST_URI} ^/sites/([a-z0-9-_]+)/? 
RewriteCond %{REQUEST_FILENAME} !-s 
RewriteRule ^(.*) http://domain.com/ [R=302] 

Wystarczy użyć -f przetestować jeśli żądany plik istnieje i jest zwykłym plikiem, -s jeśli istnieje i ma rozmiar pliku większy niż 0 i -d, aby sprawdzić, czy istnieje i jest katalogiem.

+1

Doceniam Cię, pomóż. Dało mi to wiele do zrobienia .htaccess. Wezmę głos, jeśli odpowiesz. Może kiedyś. – TheHerk

+1

@ TheHerk Czy to działa? – 5ervant

+2

Tak. W końcu zrobiłem to trochę inaczej, ponieważ zmieniła się moja struktura, ale informacje pomogły mi zrozumieć, co musiałem zrobić. – TheHerk

0

Jeśli chcesz określonych subdomen, które nie istnieją, to po prostu musisz je utworzyć, a następnie przekierować.

Aby przechwycić wszystkie błędne poddomeny, powiedzmy, że przez przypadek wpisano metaa.stackoverlow.com, użyj symbolu wieloznacznego: *.stackoverflow.com. W cpanelu, to po prostu wymaga zaznaczenia pola wyboru, które zadaje pytanie "utwórz wildcard"? lub podobne. Aby bezpośrednio edytować .htaccess, wystarczy wpisać * w miejsce każdej określonej subdomeny.

Zauważ, że odnosi się to również do wszelkich katalogów:

subdomain.site.com/*

*.site.com/dir

*.site.com/*