2016-04-08 3 views
7

voglio essere in grado di reindirizzare tutti i sottodomini in una cartella:.htaccess reindirizzare tutti i sottodomini nella stessa directory

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

per esempio, se alcune visite sub1.example.com manterrà l'URL, ma mostrare example.com/subdomains/sub1 e se il SUB1 la directory non esiste, mostrerà example.com/404

È possibile?

ho provato il codice di cui sopra, ma la sua mostrandomi:

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

Wordpress dice:

# 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 

e nella parte superiore del mio file .htaccess, è:

RewriteEngine On 
DirectoryIndex index.php 

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

Cosa succede se si passa direttamente a 'http: // example.com/subdomains/sub1 /'? Hai anche un errore 'Forbidden' o hai accesso ad esso? Ad ogni modo, il tuo codice dovrebbe funzionare, nonostante il fatto che non sia scritto bene. E penso che funzioni davvero. Quando hai questo 'Probidden', vedi' sub1.example.com' come url? –

+0

no che funziona bene senza errori – charlie

+0

Anche il codice mi sembra soddisfacente. Il problema proibito può essere causato da altre impostazioni .htaccess, ad esempio su IndexIgnore.Controlla dove sei portato. –

risposta

10

Il tuo precedente .htaccess reindirizza esternamente le chiamate, come si utilizza un URL completo come destinazione.

Nella tua domanda dici di voler mantenere il nome host, quindi presumo che sia il requisito.

0) Abilitazione motore di riscrittura

RewriteEngine On 

1) Riscrittura sottodomini noti per la loro directory in/sottodomini

# 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. Quando incontriamo una richiesta con un sottodominio,
  2. e noi non l'ho riscritto a/sottodomini
  3. e non l'abbiamo riscritto a/404
  4. poi riscriverla a/sottodomini/{sottodominio}/

Quindi, se la richiesta è stata

http://foo.example.com/hello 

l'URL nel browser sarebbe rimasto lo stesso, ma internamente essere associato a

/subdomains/foo/ 

2) riscrittura sottodomini sconosciuti a/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. Quando incontriamo una richiesta con un sottodominio,
  2. e abbiamo già riscritto a/sottodomini
  3. e non abbiamo riscritto a/404
  4. e non è esistente come un file
  5. e non è esistente come una directory
  6. e non è esistente come collegamento simbolico
  7. poi riscrivere a/404
012.351.641.061.

Quindi, se la richiesta è stata

http://bar.example.com/hello 

l'URL nel browser sarebbe rimasto lo stesso, ma internamente essere associato a

/subdomains/bar/ 

dal primo RewriteRule da 1).

Se /subdomains/bar/ non esiste, la seconda RewriteRule da 2) entreranno in gioco e mappare internamente al

/404/ 

3) Test-Ambiente

in realtà ho provato tutto questo con il codice esemplare, disponibile qui: https://github.com/janpapenbrock/stackoverflow-36497197

+0

ho anche installato Wordpress - devo mettere queste 2 parti di codice sopra o sotto il codice wordpress? – charlie

+0

Usi wordpress per questi sottodomini o solo il dominio principale? Se solo per il main, proverei a metterlo sopra. –

+0

è solo il dominio principale - wordpress viene eseguito solo sul dominio principale. Ho provato a metterlo sopra e funziona, ma impedisce al dominio principale (wordpress) di funzionare e se lo metto sotto, wordpress funziona ma nessuno dei sottodomini fa – charlie

3

I 'dì che stai riscontrando un problema di autorizzazione. Immagino che il tuo server Apache funzioni come utente apache. Utilizzare chmod per fornire l'accesso apache a questo percorso.