我正在尝试使用mod_rewrite清理指向flash视频播放器的网址。首先,这是我试图重写的原始URL:
library/player.swf?path=path-to-file.flv当我直接访问上面的URL时,它工作得很好。我已经编写了swf代码来自动获取path参数并播放视频。这没什么问题。下面是我尝试重写的规则:
RewriteRule ^player/(.+)$ library/player.swf?path=$1 [QSA,L]当访问url player/path-to-file.flv时,我得到了swf,但没有视频加载。为了调试的目的,我在flash中设置了一个弹出窗口来告诉我路径名,它看起来根本没有传递该路径。
另一方面,如果我使用完全相同的规则,但将其指向test.php而不是player.swf,则test.php文件能够回显该参数。
因此,问题归结为,我是否做错了什么,或者是不可能通过mod_rewrite向swf发送查询字符串?
发布于 2010-02-02 02:29:18
使用您正在尝试的机制是不可能的。请记住,.swf是在客户端处理的,所以服务器所做的一切就是将文件发送到客户端。query-string与此无关,服务器基本上会忽略它。
可以在.swf文件中读取查询字符串参数,但同样不能使用直接提供服务的文件。这也是由于这些东西是如何工作的。要访问参数,需要将.swf嵌入到DOM中,然后它将能够访问DOM并通过DOM接口获得查询字符串,因此将作为html页面的一部分。
如果有任何帮助的话,我经常看到的一种将参数放入.swf文件的方法是使用PHP脚本动态创建标签,并以这种方式设置与查询字符串参数、数据库变量等相对应的参数。然后,整个页面被提供服务,当.swf应用程序由flash运行时运行时,参数被传递到flash应用程序中。
发布于 2010-02-02 10:22:57
我对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);上面的代码只是在一个警告窗口中张贴文件名,但重点是理论上你可以用它来创建“干净”的urls。这感觉有点老土,但你可以让它工作。
发布于 2010-02-02 03:00:16
如果您将R添加到指令标志,它将执行客户端应该看到的外部重定向。
https://stackoverflow.com/questions/2179016
复制相似问题