2017-07-18 4 views
1

Ich habe mein Verzeichnis wie folgt aus:Dynamische Sub-Domain-Seiten mit .htaccess oder PHP

  • /index.php (Website Hauptseite)
  • /sites
    • site1
    • site2
    • site3
  1. wenn ich site1.example.com gehen, ich will es example.com/sites/site1/index.php

  2. zeigen, wenn ich zu site1.example.com/page1 gehen, ich will es die Datei zeigen example.com/sites/site1/page1.php

Wie kann ich TU das? Vielen Dank!

+0

Werden keine Subdomänen vom Domain-Registrar behandelt? –

Antwort

2

Ich nehme alle Subdomains an der gleichen Stelle wie die Haupt-Domain verweisen, so subdomain.example.com und example.com Punkt an der gleichen Stelle.

Versuche so etwas wie die folgend in der .htaccess-Datei im Stammverzeichnis der Haupt-Website:

RewriteEngine On 

# Exclude requests for the www subdomain 
RewriteCond %{HTTP_HOST} ^www\. [NC] 
RewriteRule^- [L] 

# Requests for the site root 
RewriteCond %{HTTP_HOST} ^(.+)\.example\.com [NC] 
RewriteRule ^$ sites/%1/index.php [L] 

# Requests that are "assumed" to be .php files 
RewriteCond %{HTTP_HOST} ^(.+)\.example\.com [NC] 
RewriteRule ^([^.]*)$ sites/%1/$1.php [L] 

# All other requests 
RewriteCond %{HTTP_HOST} ^(.+)\.example\.com [NC] 
RewriteRule !^sites/ sites/%1%{REQUEST_URI} [L] 

Dies setzt voraus, dass ein gültiger URL-Pfad keinen Punkt enthält.

%1 ist ein Rückverweis auf die erfassten Gruppe im CondPattern (dh. Die Subdomäne) und $1 ist ein Rückverweis auf die erfassten Gruppe im RewriteRuleMuster.

Wie möchten Sie jedoch mit Nicht-PHP-Dateien und anderen statischen Ressourcen umgehen?


Auch, wie kann ich tun, um eine 404-Seite?

Sie können ein benutzerdefiniertes Fehlerdokument definieren. Zum Beispiel:

ErrorDocument 404 /errors/404.php 

Allerdings müssen Sie eine Ausnahme an der Spitze Ihrer .htaccess Datei, um dies zu verhindern, dass durch die Richtlinien neu geschrieben werden, die folgen. Zum Beispiel:

RewriteRule ^errors/ - [L] 
+0

Das funktioniert fast. Hier sind die Probleme: 1. Wenn Sie zu "subdomain.example.com" gehen, heißt es: '/ sites/subdomain/.php'. Es sollte standardmäßig auf 'index.php' gesetzt werden. Auch wenn ich 'subdomain.example.com/index.php' eintippe, zeigt es mir eine leere Seite, aber wenn es die' .php' entfernt, funktioniert es. –

+0

Ich habe meine Antwort aktualisiert, um hoffentlich auf diese anderen Situationen einzugehen. – MrWhite

+0

danke! besser jetzt. 1.) wenn es zu "subdomain.example.com" geht, zeigt es mir: 'example.com/sites/subdomain/sites/subdomain/.php'. Es sollte mir nur 'example.com/sites/subdomain/index.php' anzeigen. Beachten Sie, wie es zweimal wiederholt wird und am Ende kein Index steht. 2.) Wie kann ich eine 404-Seite erstellen? Wenn 'subdomain.example.com/page2' nicht existiert, zeigen Sie die Fehlerseite an:' example.com/404'. danke –

0

Sie müssen:

  1. -Setup ein Wildcard DNS record
  2. für eine Regel schreiben.htaccess

Die Regel könnte so aussehen:

RewriteEngine on 
RewriteCond %{HTTP_HOST} ^(.*)\.example\.com 
RewriteRule ^(.*)$ http://example.com/sites/%1/$1 [L,NC,QSA] 

Das ist es.

+1

Funktioniert überhaupt nicht. Es nimmt mich endlos umadressiert. –