好的,所以我试图让它如果人们去/?char=USERNAME
它会显示/game/CharWidget.swf?login=USERNAME
的内容。到目前为止,这是我的代码:
RewriteEngine on
RewriteCond %{QUERY_STRING} char=(.*)
RewriteRule ^index.php?char=(.*) /game/CharWidget.swf?login=%1
这会使网址服务器端为/game/CharWidget.swf
但不携带?char =用户名并使其成为?login = username因此它不会显示我想要显示的内容。
编辑;如果/char/USERNAME
对/game/CharWidget.swf?login=USERNAME
更容易,如果有人可以给我代码,我就不介意这样做。
答案 0 :(得分:0)
查询字符串对RewriteRule
不可见,因此^index.php?char=(.*)
永远不会匹配。 (除此之外,由于您尚未转义.
或?
,因此 将匹配indexZphchar=foo
,这可能不是您想要的。)
此外,如果用户访问/?char=USERNAME
,RewriteRule
通常会看到/
;没有index.php
。最后,如果这是在.htaccess文件中,您通常也需要RewriteBase
指令。
将所有这些修复放在一起,这样的事情应该有效:
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} ^char=(.*)$
RewriteRule ^/?(index\.php)?$ /game/CharWidget.swf?login=%1 [NS]
(正则表达式^/?(index\.php)?$
将匹配空路径或index.php
,带或不带前导斜杠。这使得它比绝对必要的更复杂,但也更强大。特别是/?
允许它在.htaccess文件之外工作,其中会出现前导斜杠。)
聚苯乙烯。正则表达式^char=(.*)$
还允许将/?char=foo&bar=baz
等网址重写为/game/CharWidget.swf?login=foo&bar=baz
。如果您不想允许此类重写,请将其替换为例如^char=([^&;]*)$
。
编辑:不幸的是,this isn't going to work for .swf files,因为那些在客户端上执行,因此无法看到服务器端重写对查询字符串所做的任何更改。
所能做的是通过将[NS]
标记替换为[NS,L,R=302]
来重写外部。但是,这也会更改浏览器地址栏中显示的URL,这可能不是您想要的。如果是这样,另一个选项是使原始请求提供给您嵌入 .swf文件的HTML页面。