2 Stimmen

Verwendung von mod_rewrite für Subdomains

Ich möchte, dass Benutzer ihre eigenen Abschnitte innerhalb meiner Website registrieren können und dass diese Abschnitte ihre eigene Subdomain meiner Website sind. So kann jemand 'test' registrieren und 'test.beispiel.com' auf ihre Website verweisen, die sich zum Beispiel unter /site.php?id=1 befindet. Wie würde ich eine Mod-Rewrite-Regel dafür schreiben?

2voto

Andrew Moore Punkte 90339

mod_rewrite ist möglicherweise nicht das beste Werkzeug dafür. RewriteRules sind großartig für das Zuordnen einer Datei zu etwas anderem, aber es wurde nicht wirklich für die Domänenzuordnung gedacht.

Das Beste, was Sie mit mod_rewrite tun können, ist folgendes:

RewriteEngine On
# Überspringe www.domain.com
RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} ^([^.]+)\.domain\.com
RewriteRule ^/(.*)$  site.php?domain=%1&file=$1 [L]

Was wirklich nicht nützlich ist. Was ich stattdessen empfehlen würde, ist den Wert von HTTP_HOST programmgesteuert zu überprüfen, wie folgt:

function get_subdomain() {
  if(preg_match('/^([^.]+)\.domain\.com/i', $_SERVER['HTTP_HOST'], $matches)) 
    return $matches[1];
}

0voto

Michael Mikowski Punkte 1259

Sie können Apache konfigurieren, um die "speziellen" Domains in der Apache-Konfiguration zu beanspruchen (z. B. www.meinedomain.com usw.) in Ihren virtuellen Host-Containern und die anderen standardmäßig auf Ihren ersten virtuellen Host zu setzen. Sie können dann die Basis-URL zu einer Dispatcher-Anwendung umleiten, die die URL überprüft und den Benutzer zu seinem richtigen Bereich weiterleitet.

Aus den Apache-2.0-Dokumenten:

Fast jede Apache-Direktive kann in einen VirtualHost-Container gestellt werden. Der erste VirtualHost-Bereich wird für Anfragen ohne bekannten Servernamen verwendet.

Fügen Sie den Code hinzu, um *.meinedomain.com im ersten virtuellen Host zu handeln:

  Servername custom.meinedomain.com
  DocumentRoot /var/www/html/custom
  RewriteEngine on
  RewriteRule ^/$ /var/www/cgi-bin/dispatch.cgi [R]
  # weitere Konfigurationen hier

  Servername www.meinedomain.com
  DocumentRoot /var/www/html/homepage
  # weitere Konfigurationen hier

In dispatch.cgi überprüfen Sie die aufrufende URL, um zu bestimmen, wohin der Benutzer gehen soll. Stellen Sie sicher, dass Sie Ihre DNS so einrichten, dass alle Subdomains akzeptiert werden.

Hoffentlich hilft das!

0voto

helion3 Punkte 30495

Wir nutzen diese Technik tatsächlich seit einem Jahr ohne größere Probleme. Unsere mod_rewrite-Konfiguration sieht wie folgt aus:

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !www.meinedomain.com
RewriteCond %{HTTP_HOST} ^([^.]+)\.meinedomain\.com
RewriteCond %{REQUEST_URI} !admin
RewriteRule (.*) /admin/ [R=301,L]
RewriteRule ^admin(.*)$ hosted/admin/$1 [QSA,L]

Was passiert, ist dass Benutzer zu theiraccount.meinedomain.com/admin weitergeleitet werden.

Dann verwenden wir PHP, um den Kontoteil des Domainnamens zu identifizieren. Die Verwendung von etwas wie $_SERVER['SERVER_NAME'] oder einer Methode zum Abrufen des Domainnamens und zum Parsen funktioniert sehr gut.

Behalten Sie diese Konfigurationen jedoch in der httpd.conf bei, da dies bei stark frequentierten Websites zu einem CPU-Problem werden kann, wenn es als .htaccess beibehalten wird.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X