Mit mod_rewrite für Subdomains
-
06-07-2019 - |
Frage
Ich wan't Menschen in der Lage sein, ihre eigenen Bereiche innerhalb meiner Website registrieren und haben diese Abschnitte ihre eigene Sub-Domain von meiner Seite sein. so kann jemand ‚Test‘ und haben ‚test.example.com‘ beziehen sich auf ihrer Website registrieren, die zu sagen /site.php?id=1 wäre ja, wie würde ich mich über eine mod_rewrite Regel für diese zu schreiben?
Lösung
mod_rewrite
vielleicht nicht das beste Werkzeug dafür sein. RewriteRules sind groß eine Datei auf etwas anderes für die Abbildung, aber es war für Domain-Matching nicht wirklich gemeint.
Das Beste, was Sie tun können, mit mod_rewrite
ist die folgende:
RewriteEngine On
# Skip www.domain.com
RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} ^([^.]+)\.domain\.com
RewriteRule ^/(.*)$ site.php?domain=%1&file=$1 [L]
Was nicht wirklich nützlich ist. Was würde ich empfehlen, statt zu tun, wenn programmatisch den Wert von HTTP_HOST
als solche überprüfen:
function get_subdomain() {
if(preg_match('/^([^.]+)\.domain\.com/i', $_SERVER['HTTP_HOST'], $matches))
return $matches[1];
}
Andere Tipps
Sie können die Apache konfigurieren, dass die „speziellen“ Domänen in der Apache-Konfiguration Anspruch (z www.mydomain.com, usw.), in der virtuellen Host-Containern und den anderen Standard zu Ihrem ersten virtuellen Host haben. Anschließend können Sie die Basis-URL zu einem Versand Anwendung neu zu schreiben, der die URL prüft und sendet den Benutzer ab, um ihren richtigen Bereich.
Von Apache 2.0-Dokumentation:
Fast jede Apache-Richtlinie gehen kann in einen Virtualcontainer. Das erster Virtual Abschnitt wird verwendet für Anfragen ohne bekannte Servernamen.
Sie den Code * Put .mydomain.com in der ersten virtuellen Host zu behandeln:
<VirtualHost *:80>
Servername custom.mydomain.com
DocumentRoot /var/www/html/custom
RewriteEngine on
RewriteRule ^/$ /var/www/cgi-bin/dispatch.cgi [R]
# more configs here
</VirtualHost>
<VirtualHost *:80>
Servername www.mydomain.com
DocumentRoot /var/www/html/homepage
# more configs here
</VirtualHost>
In dispatch.cgi, überprüfen Sie die Aufruf-URL zu bestimmen, wo der Benutzer gehen soll. Stellen Sie sicher, dass Sie Ihre DNS einzurichten, um alle Sub-Domains übernehmen.
Ich hoffe, das hilft!
Eigentlich haben wir für das vergangene Jahr ohne großes Problem dieser Technik im Einsatz. Unsere mod_rewrite Config wie folgt aussehen:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !www.mydomain.com
RewriteCond %{HTTP_HOST} ^([^.]+)\.mydomain\.com
RewriteCond %{REQUEST_URI} !admin
RewriteRule (.*) /admin/ [R=301,L]
RewriteRule ^admin(.*)$ hosted/admin/$1 [QSA,L]
Was passiert, ist, dass die Benutzer gerichtet theiraccount.mydomain.com/admin.
Wir verwenden PHP dann das Konto Teil des Domain-Namens zu identifizieren. Mit so etwas wie $ _SERVER [ ‚SERVER_NAME‘] oder ein Verfahren zur Bestimmung der Domain-Namen bekommen und Parsen es sehr gut funktioniert.
Halten Sie diese configs in der httpd.conf obwohl dies ein CPU-Problem in höheren Traffic-Site werden wird, wenn es als .htaccess gehalten wird.