.htaccess schreibt die Subdomain in das Verzeichnis um

Antworten:

106

Versuchen Sie, dies in Ihre .htaccess-Datei aufzunehmen:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^sub.domain.com
RewriteRule ^(.*)$ /subdomains/sub/$1 [L,NC,QSA]

Für eine allgemeinere Regel (die mit jeder Subdomain funktioniert, nicht nur sub) ersetzen Sie die letzten beiden Zeilen durch folgende:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com
RewriteRule ^(.*)$ subdomains/%1/$1 [L,NC,QSA]
Ansari
quelle
3
Die Lösung von Ansari funktioniert jedoch. Wenn ich zu navigiere http://test.domain.com, leitet mich die URL weiter http://test.domain.com/subdomains/test/. Ist es möglich, ohne das /subdomains/test/am Ende zu zeigen?
Erik Djupvik
2
In diesem Fall müssen Sie meines Erachtens die Verwendung von mod_proxy prüfen und Pzusätzlich zu dem ein Flag angeben L.
Ansari
1
Nein, es leitet weiter http://test.domain.com/subdomains/test/, wenn ich nur möchte, dass es http://test.domain.com/
Erik Djupvik
1
Ich kann nicht sehen, wie es umleitet test.domain.com/subdomains/test- vielleicht ist hier noch etwas los. Können Sie RewriteBase /gleich danach hinzufügen RewriteEngine on? Wenn Sie möchten, dass es weiterhin test.domain.comangezeigt wird, müssen Sie mod_proxy und das [P]Flag verwenden.
Ansari
1
Ich konnte es mit @ anubhavas Antwort hier zum Laufen bringen
Micah
50

Ich bin kein mod_rewrite-Experte, ich habe oft Probleme damit, aber ich habe dies auf einer meiner Websites getan. Je nach Ihren Umständen sind möglicherweise andere Flags usw. erforderlich. Ich benutze dies:

RewriteEngine on

RewriteCond %{HTTP_HOST} ^subdomain\.example\.com$
RewriteCond %{REQUEST_URI} !^/subdomains/subdomain
RewriteRule ^(.*)$ /subdomains/subdomain/$1 [L] 

Alle anderen Umschreiberegeln für den Rest der Site müssen anschließend ausgeführt werden, um zu verhindern, dass sie das Umschreiben Ihrer Subdomain beeinträchtigen.

Lee Kowalkowski
quelle
So würde ich sagen. Ich fand, dass diese Einstellung die richtige ist, genauso wie meine Antwort hier .
Chetabahana
5
Nur als Referenz, falls jemand, der mit beginnt, .htaccessauf diese Seite kommt (wie ich), müssen Sie neben dem Erstellen der eigentlichen .htaccessDatei auch AllowOverrideIhre VirtualHostEinstellungen vornehmen ( stackoverflow.com/a/22819550/1657502 ) , damit sie wirksam wird. , aktivieren Sie das Apache- rewriteModul und starten Sie Apache neu ( stackoverflow.com/a/5758551/1657502 )
Antonio Vinicius Menezes Medei
Dies funktioniert nicht, wenn Sie www verwenden, um die Subdomain zu besuchen. Die @ Minh-Lösung funktioniert in allen Fällen.
Rohan Khude
@RohanKhude, meinst du, wenn du willst, dass www.example.com und example.com unterschiedliche Inhalte bereitstellen? Denn normalerweise hätten Sie für SEO www.example.com, um eine permanente Weiterleitung zu example.com oder umgekehrt durchzuführen.
Lee Kowalkowski
1
@RohanKhude www als Subdomain einer Subdomain ist auch etwas, das Sie auch auf DNS-Ebene arbeiten müssen, nicht wahr? Ich denke, Ihre Erwartung, dass es für jede beliebige Subdomain funktionieren sollte, ist falsch. Die Antwort von Minh ( stackoverflow.com/a/41389905/30945 ) geht davon aus, dass Ihre .htaccess-Konfiguration 1 und nur 1 Subdomain unterstützt und daher in dieser Hinsicht weniger robust ist. Meine Lösung unterstützt so viele Subdomains wie Sie benötigen, aber ja, Sie müssen jede unterstützte Subdomain explizit definieren, aber ein optionales www.Präfix wird wahrscheinlich am besten über eine Umleitung als über ein Umschreiben unterstützt.
Lee Kowalkowski
16

Sie können die folgende Regel in .htaccess verwenden , um eine Unterdomäne in einen Unterordner umzuschreiben:

RewriteEngine On

 # If the host is "sub.domain.com"
 RewriteCond %{HTTP_HOST} ^sub.domain.com$ [NC]
 # Then rewrite any request to /folder
 RewriteRule ^((?!folder).*)$ /folder/$1 [NC,L]

Zeile für Zeile Erklärung:

  RewriteEngine on

Die obige Zeile weist den Server an, die Engine zum Umschreiben von URLs einzuschalten.

  RewriteCond %{HTTP_HOST} ^sub.domain.com$ [NC]

Diese Zeile ist eine Bedingung für die RewriteRule, bei der wir mithilfe eines Regex-Musters mit dem HTTP-Host übereinstimmen. Die Bedingung besagt, dass wenn der Host sub.domain.com ist, die Regel ausgeführt wird.

 RewriteRule ^((?!folder).*)$ /folder/$1 [NC,L]

Die Regel stimmt mit http://sub.domain.com/foo überein und leitet sie intern an http://sub.domain.com/folder/foo weiter .

Ersetzen Sie sub.domain.com durch Ihre Subdomain und Ihren Ordner durch den Namen des Ordners, auf den Sie Ihre Subdomain verweisen möchten.

Amit Verma
quelle
1
Dies ist die richtige Antwort für mich - Erklärung, wie ich hierher gekommen bin, wie folgt. Ich bin hier angekommen und habe nach einem uralten Problem mit der Subdomain-Umleitung gesucht, das anscheinend kaputt gegangen ist, als ich SSL auf der TLD der Hauptseite installiert habe. Bei der Umleitung wurde zunächst immer noch versucht, die TLD der Hauptwebsite weiterhin zu verwenden, und es wurden Sicherheitsregeln verletzt. Was ich brauchte, war, die Subdomain (die sich auf einer völlig anderen TLD befand) auf demselben Host zu halten, aber nicht auf der Hauptseite. Durch Hinzufügen einer Umschreiberegel wie oben konnte ich die gesamte Subdomain an den Ordner weiterleiten, der unter der Haupt-TLD-Site gehostet wird.
Richard Bown
8

Ich hatte das gleiche Problem und fand eine ausführliche Erklärung unter http://www.webmasterworld.com/apache/3163397.htm

Meine Lösung (der Inhalt der Subdomains sollte sich in einem Ordner namens befinden sd_subdomain:

Options +FollowSymLinks -MultiViews

RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} subdomain\.domain\.com
RewriteCond $1 !^sd_
RewriteRule (.*) /sd_subdomain/$1 [L]
Pablo Torrecilla
quelle
1
Es funktioniert bei mir nicht. Muss ich etwas in der DNS-Zone der Domain konfigurieren?
Totoaussi
1
@totoaussi Sie sollten einen * A-Datensatz oder einen A-Datensatz pro Subdomain erstellen, der auf denselben Server verweist.
Pablo Torrecilla
4

Dadurch wird in denselben Ordner zu einer Unterdomäne umgeleitet:

.httaccess

RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} ^([^\.]+)\.domain\.com$ [NC]
RewriteRule ^(.*)$ http://domain\.com/subdomains/%1
jmsmarcelo
quelle
3

Versuchen Sie, diese .htaccess-Datei im Subdomain-Ordner abzulegen:

RewriteEngine On

RewriteRule ^(.*)?$ ./subdomains/sub/$1

Es wird zu http://domain.com/subdomains/sub/ weitergeleitet , wenn nur http://sub.domain.com/ angezeigt werden soll.

Minh Trịnh
quelle
Die Frage wurde 2012 gestellt und hat 8 Antworten. Bietet Ihre Antwort an dieser Stelle einen Mehrwert?
ppovoski
Diese Lösung funktioniert auch, wenn Sie www verwenden, um die Subdomain zu besuchen
Rohan Khude
2

Subdomain-Verzeichnis umleiten:

RewriteCond %{HTTP_HOST} ^([^.]+)\.(archive\.example\.com)$ [NC]
RewriteRule ^ http://%2/%1%{REQUEST_URI} [L,R=301]
Mayank Awasthi
quelle
0

Verwenden Sie für jede Subdomain-Anfrage Folgendes:

RewriteEngine on 
RewriteCond %{HTTP_HOST} !^www\.band\.s\.co 
RewriteCond %{HTTP_HOST} ^(.*)\.band\.s\.co 
RewriteCond %{REQUEST_URI} !^/([a-zA-Z0-9-z\-]+) 
RewriteRule ^(.*)$ /%1/$1 [L] 

Machen Sie einfach einen Ordner gleich dem Sub-Domain-Namen, den Sie benötigen. Der Ordner muss wie folgt vorhanden sein: domain.com/sub für sub.domain.com .

Hafij Khan
quelle
Dies funktioniert bei mir, behält aber die Datei nicht bei. Zum Beispiel sub.domain.com/index.php werfen 404
Paolo Falomo