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.