2016-04-08 7 views
7

ich alle Sub-Domains in einen Ordner umleiten können, möchten:.htaccess umleiten alle Sub-Domains in das gleiche Verzeichnis

RewriteCond %{HTTP_HOST} ^([^/.]+)\.example\.com$ 
RewriteRule (.+)$ "http://example.com/subdomains/%1" [L,P] 

zum Beispiel, wenn einige Besuche sub1.example.com es wird die URL halten aber zeigen example.com/subdomains/sub1 und wenn die sub1 Verzeichnis existiert nicht, es wird angezeigt example.com/404

Ist das möglich?

habe ich versucht, den obigen Code aber its me zeigt:

Forbidden 
You don't have permission to access /index.php on this server. 

Wordpress sagt:

# BEGIN WordPress 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 

# END WordPress 

und an der Spitze meiner .htaccess-Datei ist:

RewriteEngine On 
DirectoryIndex index.php 

RewriteCond %{HTTP_HOST} admin.domain.com$ 
RewriteRule ^(.*)$ /admin/system/$1 [L] 
+0

Was passiert, wenn Sie direkt zu 'http: // example.com/subdomains/sub1 /' gehen? Haben Sie auch einen 'Verboten' Fehler oder haben Sie Zugriff darauf? Wie auch immer, dein Code sollte funktionieren, obwohl er nicht gut geschrieben ist. Und ich denke, es funktioniert tatsächlich. Wenn du dieses "Verboten" hast, siehst du "sub1.example.com" als URL? –

+0

nein, das funktioniert ohne Fehler – charlie

+0

Code sieht auch gut für mich aus. Ein verbotenes Problem kann durch andere .htaccess-Einstellungen verursacht werden, z. B. bei IndexIgnore.Überprüfen Sie, wohin Sie geführt werden. –

Antwort

10

Ihre obige .htaccess würde die Aufrufe extern umleiten, da Sie eine vollständige URL als Ziel verwenden.

In Ihrer Frage sagen Sie, dass Sie den Hostnamen behalten wollen, also nehme ich an, dass das die Voraussetzung ist.

0) aktivieren Rewrite-Engine

RewriteEngine On 

1) Umschreiben bekannten Subdomains ihrem Verzeichnis in/Subdomains

# Rewrite known subdomains to /subdomains/{subdomain}/ 
RewriteCond %{HTTP_HOST} ^([^/.]+)\.example\.com$ 
RewriteCond %{REQUEST_URI} !^/subdomains [NC] 
RewriteCond %{REQUEST_URI} !^/404 [NC] 
RewriteRule ^(.+)$ /subdomains/%1/ [L] 
  1. Wenn wir eine Anfrage mit einer Sub-Domain begegnen,
  2. und wir habe es nicht in/subdomains
  3. umgeschrieben und wir haben es nicht umgeschrieben/404
  4. umschreiben es dann zu/Subdomains/{Sub-Domain}/

Also, wenn die Anfrage

http://foo.example.com/hello 

die URL im Browser gleich bleiben würde, aber intern auf

abgebildet werden
/subdomains/foo/ 

2) Umschreiben unbekannt Subdomänen zu/404

# Rewrite missing unknown subdomains to /404/ 
RewriteCond %{HTTP_HOST} ^([^/.]+)\.example\.com$ 
RewriteCond %{REQUEST_URI} ^/subdomains [NC] 
RewriteCond %{REQUEST_URI} !^/404 [NC] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteRule ^(.+)$ /404/ [L] 
  1. Wenn wir eine Anfrage mit einer Sub-Domain begegnen,
  2. und wir haben umgeschrieben es bereits/Subdomains
  3. und wir haben umgeschrieben es nicht zu/404
  4. und es existiert nicht als Datei
  5. und es existiert nicht als Verzeichnis
  6. und es existiert nicht als Symlink
  7. dann neu schreiben sie/404
So

, wenn die Anfrage war

http://bar.example.com/hello 

die URL im Browser würde gleich bleiben, aber intern zu

/subdomains/bar/ 

durch die ersten RewriteRule von 1) abgebildet werden.

Wenn /subdomains/bar/ nicht vorhanden ist, die zweiten RewriteRule von 2) wird in kicken und intern wo es zu

/404/ 

3) Testumgebung

ich eigentlich all dies mit beispielhaftem Code getestet, hier verfügbar: https://github.com/janpapenbrock/stackoverflow-36497197

+0

Ich habe auch Wordpress installiert - setze ich diese 2 Teile Code über oder unter dem Wordpress-Code? – charlie

+0

Verwenden Sie Wordpress für diese Subdomains oder nur die Hauptdomain? Wenn nur für den Hauptteil, würde ich versuchen, es oben zu setzen. –

+0

ist nur die Hauptdomain - Wordpress läuft nur auf der Hauptdomain. Ich habe versucht, es oben und es funktioniert, aber stoppt die Haupt-Domäne (Wordpress) von der Arbeit und wenn ich es unter WordPress funktioniert, aber keiner der Subdomains tun – charlie

3

I würde sagen, dass Sie ein Berechtigungsproblem haben. Ich denke, Ihr Apache-Server läuft als apache Benutzer. Verwenden Sie chmod, um apache Zugriff auf diesen Pfad zu geben.

Verwandte Themen