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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top