2012-02-27 7 views
16

Voglio configurare apache per consentire XMLHttpRequests da più domini, ma non tutti.Come configurare apache per gestire più domini con l'intestazione Access-Control-Allow-Origin?

Questo funziona:

Header set Access-Control-Allow-Origin "*" 

Ma è pericoloso, voglio permettere domini specificati da me, così dopo un po 'di googling ho avuto modo di questo:

Header set Access-Control-Allow-Origin "http://domain1.com http://domain2.com" 

Ma questo raccoglie solo fino primo dominio, il secondo non è permesso. Come specificare correttamente più domini?

risposta

35

è possibile utilizzare SetEnvIf nel file .htaccess o in nel file di vhost (dentro "Directory" del gruppo):

<IfModule mod_headers.c> 
    SetEnvIfNoCase Origin "https?://(www\.)?(mydomain\.com|mydomain2\.com)(:\d+)?$" AccessControlAllowOrigin=$0 
    Header set Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin 
</IfModule> 

Con questo codice è possibile consentire l'accesso da

  • "miodominio. com "e" mydomain2.com "
  • con o senza" www. " di fronte
  • con o senza il numero di porta
  • http o https

È possibile aggiungere più domini separati da | oppure puoi usare regexp per configurare sottodomini o pattern differenti.

+0

primo suggerimento che ho provato che funziona in modo affidabile –

+3

Grande, tranne il mio lavorato solo se metto 'Header set' invece di' Header add'. –

+2

Correggimi se sbaglio, ma penso che sia necessario rimuovere $ 1 dalla seconda riga. Con la sua presenza, qualsiasi richiesta su https fallirà, perché $ 1 cattura la "s" in https e la aggiunge alla fine dell'URL consentito (così si finisce con .com). – jonathanm

-1
Header always append Access-Control-Allow-Origin: "http://domain1.com" 
Header always append Access-Control-Allow-Origin: "http://domain2.com" 
+2

Aggiungete qualche spiegazione con la risposta per come questa risposta aiuta l'OP a risolvere il problema corrente –

+0

Questo non funziona come l'intestazione 'Access-Control-Allow-Origin' consente solo un valore, quindi questo sarebbe un modo valido di definire più valori per un'intestazione che consentiva più input, questo non è uno di quei casi. – jtimmins

Problemi correlati