Php 当url不完整时,XMLHttpRequest访问控制允许来源

Php 当url不完整时,XMLHttpRequest访问控制允许来源,php,ajax,http,Php,Ajax,Http,有时,当我提交ajax请求时,会出现此错误 XMLHttpRequest cannot load http://www.mysite.com/go/submit. Origin http://mysite.com is not allowed by Access-Control-Allow-Origin. 以下是我想到的解决方案: * Add the allow origin rule everywhere? * Write .htaccess to always redirect to fu

有时,当我提交ajax请求时,会出现此错误

XMLHttpRequest cannot load http://www.mysite.com/go/submit. Origin http://mysite.com is not allowed by Access-Control-Allow-Origin.
以下是我想到的解决方案:

* Add the allow origin rule everywhere?
* Write .htaccess to always redirect to full url
* Use this method http://james.padolsey.com/javascript/cross-domain-requests-with-jquery/
我应该如何解决这个问题

这意味着您无法分析来自其他“来源”(域、端口)的数据(json、html、图像等)

注意

术语“来源”是使用域名、应用层定义的 协议,以及(在大多数浏览器中)HTML文档的端口号 运行脚本

解决方案是在为其他数据提供服务的服务器上明确设置允许访问:

Access-Control-Allow-Origin: *
因此,您必须在不只是显示数据时就控制为您嵌入的数据提供服务的服务器

一种间接的解决方案是,通过在服务器上放置一个代理,让浏览器认为只有一个来源。在apache上,您不需要.htaccess,但是
mod\u proxy
。如果您想安装这样一个代理,您可能会感兴趣(事实上,您可能会对帮助我在我的一台服务器上设置这样一个代理的答案更感兴趣)

如果您唯一的问题是人们键入mysite.com而不是www.mysite.com,并且您只有一台服务器,则您可以使用.htaccess重写URL:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^mysite\.com$ [NC]
RewriteRule ^(.*)$ http://www.mysite.com/$1 [L,R=301]

但为什么要考虑呢。与www.mysite.com不同的域可能与mysite.com的主机不同。如果这是同一台机器,你可以通过修复链接来解决问题。我的问题是,这是主页,所以有时候快捷方式用户只需键入url mysite.com而不是完整的url,如果他们单击网站上的任何其他链接,他们将获得完整的url,但他们键入时我无法控制第一页。我应该只键入页眉吗('Access-Control-Allow-Origin:*mysite.com');是的,您可以添加此标题。但是,如果问题只是人们忘记了“www”,请参见编辑:您可以重写url。两种解决方案都有效。