Flash Mod_将查询字符串重写到swf文件

Flash Mod_将查询字符串重写到swf文件,flash,.htaccess,mod-rewrite,Flash,.htaccess,Mod Rewrite,我正在尝试使用mod_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

我正在尝试使用mod_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_rewrite将查询字符串发送到swf?

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

可以读取.swf文件中的查询字符串参数,但也可以不读取直接服务的文件中的查询字符串参数。这又是因为这些东西是如何工作的。。。要访问参数,.swf需要嵌入到DOM中,然后它将能够访问DOM并通过DOM接口获得查询字符串,因此将作为html页面的一部分


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

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

我投票支持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。这感觉有点粗糙,但你可以让它工作。

等等,我相信你可以,但你必须编写解析这些参数所需的ActionScript,例如,看看我在一家知名公司的一些旧作品的示例:

不要在我面前马上看到FLA,但也许我的例子可以帮助你了解你的决心。因此,是的,你可以动态解析flash中的变量,但我相信它一定有地方可以把这些变量作为你的硬cookie来写,以便跟踪这些变量,因此无法动态保存这些信息。也许通过一些服务器配置和闪存重写,理论上你可以做你想做的事情

无论如何,可以编写一个PHP文件,该文件是动态flash的liason,用于在加载时对flash电影推送/浮动/强制变量,或者简单地使用js调用dom,根据dom的反馈重写flash。如果你跳出框框思考问题,有很多方法可以解决问题。请随意查看SWF,只是不要重复使用它,它显然只是用于示例目的

例如:


现在在这个例子中,我使用flash的唯一目的是调整显示外部HTML所需的高度,这样做是为了有一个跨浏览器的sure fire方法来有效地跨平台和浏览器获得正确的大小。很少有人支持使用纯javascript来实现这一点,而不必从头开始编写冗长的javascript,没有时间这么做,所以我选择了flash,因为当时我为该公司工作的大多数其他项目在某种程度上都是flash项目。

Swf文件不一定要用HTML包装才能访问查询字符串参数。我在Flex中使用Application.Application.parameters对象,即使没有HTML包装器,它也非常有效。我所要做的就是将浏览器指向player.swf?path=whatever.flv,然后按预期加载所有内容。我想我同意你的第一段。mod_rewrite是服务器端,swf是客户端,这会导致我的参数永远无法通过。啊,我想浏览器会创建某种形式的DOM供flash播放器访问,即使没有一些HTML包装:)好的,这很有意义。Webkit的inspector确实显示了一个简单的html主体结构被自动抛出,但是URL根本没有被清理。它和往常一样是一个丑陋的URL,没有重定向的意义。。。