如何将Access-Control-Allow-Origin限制为特定路径?

时间:2014-06-09 03:20:38

标签: .htaccess laravel-4

我有一个通过javascript服务广告的网站。所以,我基本上允许用户包含我的脚本....:

<script src="http://www.example.com/ads.js" ></script>
<script>
    MYADDS.insertAdvert(); 
</script>

问题是,我一直得到:&#34; No Access-Control-Allow-Origin&#34;错误。直到我将此添加到我的htaccess文件中:

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

问题是,这会打开我的整个网站,可能存在安全风险。因此,看到ads.js文件实际上只对ajax请求执行:

http://www.example.com/place/where/my/adds/are/fed/from

如何使上述htaccess规则仅适用于该路径?请记住,它不是一个实际目录,因此我无法将htaccess文件放在该文件夹中。它实际上是一条虚拟路径&#34;。该站点使用Laravel构建,因此执行典型的laravel路径重写。这是一个完整的htaccess文件:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L]

</IfModule>

任何想法如何做到这一点?

2 个答案:

答案 0 :(得分:0)

您还需要在htaccess中添加以下两行

Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type"
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"

所以你的额外htaccess将如下所示

Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type"
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"

答案 1 :(得分:-3)

就像这样容易:

$response->header('Access-Control-Allow-Origin', '*');