2013-04-04 9 views
5

Ich versuche, mit .htaccess in der folgenden Weise umzuleiten. Ich bin mit .htaccess nicht so vertraut, also bin ich mir nicht sicher, dass es gemacht werden kann. Außerdem weiß ich nicht, ob meine Absicht, dies zu tun, den Best Practices für SEO folgt.Wie leite ich Subdomains um, die nicht existieren?

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 

Meine größte Frage ist, ob ich eine nicht vorhandene Subdomain und Redirect erkennen kann. Ich würde gerne sehen, wie all dies erreicht wird.

+2

@ Johnsonmk2 Was ist mit der akzeptierte Antwort unklar ist? – Sumurai8

+0

Ich nehme an, mit "nicht existieren" meinst du eigentlich, dass die Subdomains existieren, aber es gibt keine entsprechenden Webseiten für sie, oder? –

+0

Ja Alexis. Was ist gemeint, wenn ich alle "* .domain.com" zu "domain.com/*" weiterleite, finde heraus, ob dieser Ordner (Webseite) nicht existiert, und leite dann zu "domain.com" um. Die akzeptierte Antwort war sehr detailliert darüber, wie dies zu tun ist. – TheHerk

Antwort

7

Zuerst müssen Sie Platzhalter-Subdomains hinzufügen, indem Sie eine Subdomain mit einem * als Namen erstellen, nur wenn Ihr Webhost dies zulässt. Und dies in Ihren .htaccess sein muß, versuchen, es zu testen, um zu sehen, ob es funktioniert:

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] 

Nur -f verwenden, um zu testen, ob eine angeforderte Datei existiert und eine reguläre Datei, -s wenn es existiert und hat eine Dateigröße größer als 0 und -d um zu testen, ob es existiert und ein Verzeichnis ist.

+1

Ich schätze deine Hilfe. Es hat mich sehr weit gebracht, meine .htaccess einzurichten. Ich würde deine Stimme abgeben, wenn ich könnte. Vielleicht eines Tages. – TheHerk

+1

@TheHerk Hat es funktioniert? – 5ervant

+2

Ja. Ich habe es etwas anders gemacht, weil sich meine Struktur verändert hat, aber deine Informationen haben mir geholfen zu verstehen, was ich tun musste. – TheHerk

0

Wenn Sie bestimmte Subdomains möchten, die nicht existieren, müssen Sie sie nur erstellen und dann umleiten.

Um alle fehlerhaften Subdomains abzufangen, sagen Sie ich versehentlich metaa.stackoverlow.com, verwenden Sie einen Platzhalter: *.stackoverflow.com. In cpanel, das bedeutet nur ein Kontrollkästchen, das fragt 'make wildcard?' o.ä. Um direkt .htaccess zu bearbeiten, geben Sie einfach * anstelle jeder spezifischen Subdomain ein.

Beachten Sie, dass dies auch für alle Verzeichnisse gilt:

subdomain.site.com/*

*.site.com/dir

*.site.com/*

Verwandte Themen