2012-01-17 5 views
6

Ho un .htaccess che associa un dominio a una cartella.Modifica .htaccess con PHP

RewriteEngine On 
RewriteBase/

# redirect mapped domain 
ReWriteCond %{HTTP_HOST} joshblease.uk.to 
ReWriteCond %{REQUEST_URI} !gme-index/ 
ReWriteRule ^(.*)$ gme-index/$1 [L] 

C'è un modo per modificare/aggiungere mappe di dominio aggiuntive al file utilizzando PHP?

Semplicemente, voglio ottenere il contenuto del file .htaccess e aggiungerlo usando uno script PHP.

+0

Nooooooooooooooo mai modificare.htaccess con PHP, stai solo chiedendo problemi di sicurezza ... – Cyclone

+6

@Cyclone: ​​se eseguito correttamente, non è un rischio per la sicurezza. – ThiefMaster

+0

Ancora niente e mi sono guardato intorno per un po ', scusate se è molto. Sono uno sviluppatore alle prime armi. E 'come cpanel e come i reindirizzamenti http vengono aggiunti con quello. –

risposta

3

Come suggerito in uno dei commenti sopra è meglio usare RewriteMap per il tuo caso qui piuttosto che provare a modificare .htaccess dal codice PHP direttamente. Ecco un esempio come usarlo:

  1. Aggiungete la seguente riga al file httpd.conf:

    RewriteMap domainMap txt://path/to/domain-dir.txt 
    
  2. Creare un file di testo come /path/to/domain-dir.txt come questo:

    sub1 /subdir1 
    sub2 /foodir2 
    foo /bar 
    
  3. Aggiungi questa riga nel tuo file .htaccess:

    Options +FollowSymLinks -MultiViews 
    RewriteEngine on 
    RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$ [NC] 
    RewriteRule ^$ ${domainMap:%1} [L,R] 
    

Effettivamente tutto questo significa è quello di avere questi redirect sul posto:

  • sub1.domain.com/ => sub1.domain.com/subdir1
  • sub2.domain.com/ => sub2.domain.com/foodir2
  • foo.domain.com/ => foo.domain.com/bar

Vantaggio: Con questa impostazione a posto, può modificare o ricreare il file /path/to/domain-dir.txt come muc h come vuoi dal tuo codice php senza aprire un enorme buco di sicurezza permetti al codice php di modificare direttamente .htaccess.

+0

Esiste comunque lo scopo senza il file httpd.conf? Sono su hosting condiviso. –

+0

Purtroppo no perché la direttiva 'RewriteMap' va solo nel file httpd.conf. Tuttavia sarà solo ** una volta ** cambia in httpd.conf. – anubhava

3

Questo potrebbe lavorare per la vostra situazione:

Ammend il .htaccess di guardare il seguente:

RewriteEngine On 
RewriteBase/

# redirect mapped domain 
ReWriteCond %{HTTP_HOST} joshblease.uk.to 
ReWriteCond %{REQUEST_URI} !gme-index/ 
ReWriteRule ^(.*)$ gme-index/$1 [L] 

###CUSTOM RULES### 

script php $ assumendo regole detiene le nuove regole generate da ammended;

$htaccess = file_get_contents('/path/to/.htaccess'); 
$htaccess = str_replace('###CUSTOM RULES###', $rules."\n###CUSTOM RULES###", $htaccess); 
file_put_contents('/path/to/.htaccess', $htaccess); 

esempio di cui sopra è la teoria e non è stato testato, sarebbe dipende privledges .htaccess e le autorizzazioni dello script.

1

È possibile utilizzare il seguente htaccess per mappare qualsiasi dominio diverso da maindomain.com in una cartella con lo stesso nome del nome di dominio.

RewriteCond %{ENV:REDIRECT_STATUS} ^$ 
ReWriteCond %{HTTP_HOST} !maindomain.com 
ReWriteCond %{HTTP_HOST} (.*) 
ReWriteRule ^(.*)$ %1/$1 [L] 

in alternativa; per mappare la cartella al nome di dominio senza la ltd.

RewriteCond %{ENV:REDIRECT_STATUS} ^$ 
ReWriteCond %{HTTP_HOST} !maindomain.com 
ReWriteCond %{HTTP_HOST} ^([^\.]*) 
ReWriteRule ^(.*)$ %1/$1 [L] 

Non esattamente quello che volevi, ma potrebbe funzionare per te, e non ha bisogno di php.