2009-07-31 13 views
2

Ich möchte Leute in der Lage sein, ihre eigenen Sektionen innerhalb meiner Site zu registrieren, und diese Sektionen sind ihre eigene Subdomain meiner Site. also kann jemand "test" registrieren und "test.example.com" auf seine Seite verweisen, was dann "/site.php?id=1" wäre. Wie würde ich also eine mod_rewrite-Regel dafür schreiben?Verwenden von mod_rewrite für Subdomains

Antwort

2

mod_rewrite ist möglicherweise nicht das beste Werkzeug dafür. RewriteRules eignen sich hervorragend zum Zuordnen einer Datei zu etwas anderem, aber nicht zum Domänenabgleich.

Das Beste, was Sie tun können, mod_rewrite verwendet, 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] 

, die 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]; 
} 
0

Sie Apache so konfigurieren, dass die „speziellen“ Domänen in der Apache-Konfiguration (zB www.mydomain.com, usw.), dadurch gekennzeichnet, in Ihren virtuellen Hostcontainern und haben Sie die anderen Standard zu Ihrem ersten virtuellen Host. Sie können die Basis-URL dann in eine Dispatch-Anwendung umschreiben, die die URL überprüft und den Benutzer an den richtigen Bereich sendet.

Von Apache 2.0-Dokumentation:

Fast jede Apache Direktive in einen Behälter Virtual gehen kann. Der erste VirtualHost-Abschnitt wird für Anforderungen ohne einen bekannten Server-Namen verwendet.

den Code * Put .mydomain.com in der ersten virtuellen Host zu handhaben:

<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, die anrufende URL prüfen, um festzustellen, wo der Benutzer gehen soll. Stellen Sie sicher, dass Sie Ihr DNS so eingerichtet haben, dass alle Subdomains akzeptiert werden.

Hoffe, dass hilft!

0

Tatsächlich haben wir diese Technik für das letzte Jahr ohne viel Problem verwendet. Unsere mod_rewrite Config wie folgt aussieht:

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 ist passiert, dass die Nutzer theiraccount.mydomain.com/admin gerichtet sind.

Wir verwenden dann PHP, um den Kontoanteil des Domain-Namens zu identifizieren. Etwas wie $ _SERVER ['SERVER_NAME'] oder eine Methode, den Domain-Namen zu bekommen und zu parsen, funktioniert sehr gut.

Behalten Sie diese Konfigurationen in der httpd.conf, aber dies wird zu einem CPU-Problem in Websites mit höherem Datenverkehr, wenn es als .htaccess gespeichert wird.

Verwandte Themen