代码之家  ›  专栏  ›  技术社区  ›  Greg W

mod_将查询字符串重写到swf文件中

  •  1
  • Greg W  · 技术社区  · 15 年前

    我正在尝试使用mod ou rewrite来清除Flash视频播放器的URL。首先,这里是我试图重写的原始URL:

    library/player.swf?path=path-to-file.flv
    

    当我直接访问上面的URL时,它工作得非常好。我已经对SWF进行了编码,以自动获取路径参数并播放视频。没有问题。下面是我的重写规则:

    RewriteRule ^player/(.+)$ library/player.swf?path=$1 [QSA,L]
    

    当访问url player/path-to-file.flv时,我得到了swf,但没有视频加载。我在flash中设置了一个弹出窗口,告诉我用于调试的路径名,看起来根本没有传递路径。

    另一方面,如果我使用完全相同的规则,但将其指向test.php而不是player.swf,那么test.php文件能够回送参数。

    所以问题归结为,我是否做了错误的事情,或者不可能通过mod重写将查询字符串发送到swf?

    4 回复  |  直到 12 年前
        1
  •  2
  •   workmad3    15 年前

    使用你正在尝试的机制是不可能的。记住.swf是在客户端处理的,所以服务器所做的就是将文件发送到客户端。查询字符串与此无关,服务器基本上将忽略它。

    可以在.swf文件中读取查询字符串参数,但同样不能使用直接提供的文件。这又是由于这些东西是如何工作的…为了访问参数,.swf需要嵌入到一个dom中,然后它将能够访问dom并通过dom接口获取查询字符串,因此将作为HTML页面的一部分。

    如果有什么帮助的话,我经常看到的将参数输入.swf文件的方法是使用一个php脚本动态地创建标记,并以这种方式设置与查询字符串参数、数据库变量等相对应的参数。然后整个页面都会被服务,当运行b时参数会被传递到.swf应用程序。是闪存运行时。

        2
  •  1
  •   Greg W    15 年前

    我对Workmad3的答案投了赞成票,但我也想继续发表这个替代方案。对于重写规则,我使用了与原始问题中发布的规则相似的规则。

    RewriteRule ^player/(.+)$ library/player.swf [L]
    

    然后在actionscript中,执行类似的操作:

    var url:String = String(ExternalInterface.call("function(){return document.location.pathname.toString();}"));
    var urlParts:Array = url.split("/");
    var length:Number = urlParts.length;
    var file:String = urlParts[length-1] + ".f4v";
    Alert.show("The filename is: " + file);
    

    上面将简单地将文件名发布到一个警报窗口中,但重点是理论上可以使用它来创建“干净”的URL。感觉有点老土,但你可以让它工作。

        3
  •  0
  •   Josh    15 年前

    如果您向指令标志添加一个[R],它将执行一个客户端应该看到的外部重定向。

        4
  •  0
  •   DoctorLouie    12 年前

    等等,我相信你可以,但是你必须编写解析这些参数所必需的操作脚本,例如,看看我为一家声誉良好的公司所做的一些旧工作的例子:

    在我面前,不要马上就有FLA可看,但也许我的例子有助于阐明你的决心。因此,是的,您可以从Flash动态分析变量,但我相信它必须有地方将这些变量作为硬cookie来记录这些变量,因此无法动态保存这些信息。也许通过一些服务器配置和闪存重写,理论上你可以做你想做的。

    无论如何,可以编写一个php文件,它是动态flash在加载时在flash影片上推/浮动/强制变量时使用的Liason,或者使用js根据来自dom的反馈重写flash。如果你想跳出框框的话,很多方法可以让你绕过这些东西。请随意查看SWF,只是不要重用它,它显然只是用于示例目的…

    例子: http://www.louierd.com/soe/itemsdetails/

    现在,在这个示例中,我使用flash的唯一目的是调整显示外部HTML所需的高度,这样做是为了有一种跨浏览器的可靠方式,有效地跨平台和浏览器获得正确的大小调整。用普通的javascript来实现这一点几乎没有什么支持,不需要从头开始写一个冗长的javascript,没有时间写,所以我使用了flash,因为当时我为该公司工作的大多数其他项目都是以某种方式或其他方式的flash项目。