htaccess Access-Control-Allow-Origin


134

Estoy creando un script que se carga externamente en otros sitios. Carga CSS y HTML y funciona bien en mis propios servidores.

Sin embargo, cuando lo intento en otro sitio web muestra este horrible error:

Access-Control-Allow-Origin

Aquí puedes ver que se carga perfectamente: http://tzook.info/bot/

Pero en este otro sitio web muestra el error: http://cantloseweight.co/robot/

Subí el script de carga a jsfiddle: http://jsfiddle.net/TL5LK/

Intenté editar el archivo htaccess de esta manera:

<IfModule mod_headers.c>    
    Header set Access-Control-Allow-Origin *
</IfModule>

O así:

Header set Access-Control-Allow-Origin *

Pero todavía no funciona.

Respuestas:


269

Pruebe esto en el .htaccess de la carpeta raíz externa:

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
</IfModule>

Y si solo se trata de scripts .js, debe incluir el código anterior dentro de esto:

<FilesMatch "\.(js)$">
...
</FilesMatch>

66
Gran consejo sobre el uso FilesMatch.
Nate

1
si hacemos coincidir los archivos agregando el bloque de coincidencia de archivos, ¿qué *hacemos?
shenkwen

¿Y necesito reiniciar el servidor después de hacer esto? Aplico el código anterior pero aún no me deja acceder a \ .json, cambié jsa json.
shenkwen

3
@shenkwen *Permite que cualquier dominio de origen acceda a este recurso. No es una lista de recursos, sino una lista de dominios de referencia.
SparK

3
En caso de que no funcione, debe intentar habilitar el headersmódulo:a2enmod headers
Joaquín O

53

nadie dice que también debes tener mod_headers habilitados, así que si aún no funciona, prueba esto:

(los siguientes consejos funcionan en Ubuntu, no sé sobre otras distribuciones)

Puede consultar la lista de módulos cargados con

apache2ctl -M

para habilitar mod_headers puedes usar

a2enmod headers

Por supuesto, después de cualquier cambio en Apache, debe reiniciarlo:

/etc/init.d/apache2 restart

Entonces puedes usar

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
</IfModule>

Y si mod_headers no está activo, esta línea no hará nada en absoluto. Puede intentar omitir la cláusula if y simplemente agregar Header set Access-Control-Allow-Origin "*"su configuración, luego debería arrojar un error durante el inicio si mod_headers no está activo.


3
He estado probando todas las opciones que pude encontrar en Google y, como dijiste, nadie dijo nada sobre mod_headers. ¡Gracias!
Sirkong

1
Mis mod_headers están activos y agregaron esta línea en .htaccess (el mismo lugar que se mencionó), pero sigo recibiendo este error: la respuesta para la verificación previa tiene un código de estado HTTP no válido 400 ... ¡Por favor sugiéralo!
Sushivam

1
¡mod_headers era lo que faltaba! Esto funciona perfectamente con la regla .htaccess. Gracias.
Andy

@SachinS no se encuentra un error 400, 500 es un error del servidor. Comience por ahí.
Andy

30

por mi experiencia;

si no funciona desde adentro, phphaga esto en .htaccessque funcionó para mí

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin http://www.vknyvz.com  
    Header set Access-Control-Allow-Credentials true
</IfModule>
  • las credenciales pueden ser verdaderas o falsas dependiendo de los parámetros de su solicitud ajax

Esto no funcionó para mí, pero pude hacerlo funcionar en PHP, el mismo principio.
RevNoah

16

Agregue un .htaccessarchivo con las siguientes directivas a su carpeta de fuentes, si tiene problemas para acceder a sus fuentes. Se puede modificar fácilmente para usar con archivos .css o .js .

<FilesMatch "\.(eot|ttf|otf|woff)$">
    Header set Access-Control-Allow-Origin "*"
</FilesMatch>

1
Cabe señalar que la anterior <FilesMatch>directiva es innecesaria, si , como se sugirió anteriormente, el .htaccessarchivo está en el directorio de fuentes y su directorio de fuentes única contiene .eot,. ttf, .otfy / o .woffarchivos.
Mesagoma

9

Las otras respuestas no funcionaron para mí, esto es lo que terminó haciendo el truco para apache2:

1) Habilite el mod de encabezados:

sudo a2enmod headers

2) Cree el /etc/apache2/mods-enabled/headers.confarchivo e inserte:

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
</IfModule>

3) Reinicie su servidor:

sudo service apache2 restart


Esta es la única solución que funcionó para mí en mi servidor Ubuntu 16.10.
kneeki

Esto funcionó también para mí. Estoy usando el servidor Ubuntu 16.04. Gracias.
jhedm

Me funcionó en Ubuntu 18.04. Sin embargo, Firefox 70.0.1 no estaba satisfecho con solo el encabezado Access-Control-Allow-Origin, y tuve que agregar el Access-Control-Allow-Methods.
borizzzzz

@songololo No pude localizar este archivo para apache en Centos 7. Busqué en todas partes en el directorio / etc / httpd. ¿Me puede decir cómo puedo implementarlo en Centos?
Mainuddin

@Mainuddin, lo siento, no estoy familiarizado con Centos. Esperemos que alguien más pueda
intervenir

7

En Zend Framework 2.0 tuve este problema. Se puede resolver de dos maneras .htaccess o encabezado php prefiero .htaccess, así que modifiqué .htaccess de:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

a

RewriteEngine On

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
</IfModule>

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

y empieza a funcionar


Esto me salvó el día, por lo que htaccess lo hizo.
Relm

4

Por cierto: la configuración .htaccess debe hacerse en el servidor que aloja la API. Por ejemplo, si crea una aplicación AngularJS en el dominio x.com y crea una API Rest en y.com, debe configurar Access-Control-Allow-Origin "*" en el archivo .htaccess en la carpeta raíz de y.com, no x .com :)

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
</IfModule>

Además, como mencionó Lukas, asegúrese de haber habilitado mod_headers si usa Apache



0

Si su host no está en pvn o dedicado, es difícil reiniciar el servidor.

Mejor solución para mí, solo edite su archivo CSS (en otro dominio o su subdominio) que llame a la fuente eot, woff, etc. a su origen (su dominio o www su dominio). Resolverá tu problema.

Quiero decir, edite la URL relativa en CSS al dominio absoluto de origen de URL

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.