1

我有通配符子域,例如:

.example.com 转到 example.com/app/

如果我使用目录而不是子域,uploadify 似乎工作正常。但是当我使用子域并单击上传图像时,什么也没有发生。它似乎可以很好地加载闪存并且没有 JS 错误,但是当我单击按钮时,我没有得到文件浏览器。也许我做通配符域的方式会影响它,不确定。这是我的htaccess:

RewriteCond %{HTTP_HOST} ^(.*).example.com
RewriteCond %{HTTP_HOST} !^www.example.com [NC]
RewriteRule ^(.*)$ http://example.com/app/%1/$1 [P]

我还使用完整路径来调用 js 和 flash 文件。它们不在子域下,而是在根域下。所以我只是使用完整的url路径,这是我的js的一个例子:

$("#fileInput").uploadify({
      'uploader'       : 'http://example.com/js/upload/_scripts/uploadify.swf',
      'script'         : 'http://sub.example.com/discuss/upload/do_upload/' + session_id,
      'cancelImg'      : 'http://example.com/images/icons/del.png',
      'folder'         : '/files/',
      'multi'          : true,
                'auto' : true,
                'queueSizeLimit' : 10,
                'buttonImg' : 'http://example.com/images/attachafile2.jpg',
                'width' : 91,
                'height' : 23,
                'wmode' : 'transparent'
   });
4

2 回答 2

2

uploadify 使用 flash 来执行上传。Flash受同源策略的约束,很像原生浏览器,只是它有一个漏洞。

Flash 将在网络服务器的根目录中查找名为crossdomain.xml的文件。此 XML 文件指示哪些其他域可以通过闪存访问其内容。

例如,这里是twitter 的跨域文件

在您的情况下,创建或修改此文件以接受来自所涉及的各个域的连接可能就足够了。

祝你好运!

于 2010-05-17T20:45:02.913 回答
0

根据同源策略的 Wikipedia 条目,这听起来像是行不通的,因为就 JavaScript 而言 sub.domain.com != domain.com 。话虽如此,只要 JavaScript认为它请求同一个域,一切都应该是桃子般的。

认为如果您告诉 Uploadify 发布到原始未重写路径并允许 Apache 自动处理重写,那么 JavaScript 不会认为它违反了同源策略。

例如:如果您重新映射domain.com/path/to/foofoo.domain.com然后在您的 JavaScript 请求/path/to/foo中,Apache 将相应地翻译请求,而 JavaScript 不会知道其中的区别。

于 2010-05-17T20:41:10.753 回答