.htaccess 为什么htaccess重写不起作用?

.htaccess 为什么htaccess重写不起作用?,.htaccess,flash,.htaccess,Flash,好的,我正在尝试这样做,如果人们进入/?char=USERNAME,它将显示/game/CharWidget.swf?login=USERNAME的内容。这是我目前的代码: RewriteEngine on RewriteCond %{QUERY_STRING} char=(.*) RewriteRule ^index.php?char=(.*) /game/CharWidget.swf?login=%1 这使得url服务器端成为/game/CharWidget.swf,但不带有?char=u

好的,我正在尝试这样做,如果人们进入
/?char=USERNAME
,它将显示
/game/CharWidget.swf?login=USERNAME
的内容。这是我目前的代码:

RewriteEngine on
RewriteCond %{QUERY_STRING} char=(.*)
RewriteRule ^index.php?char=(.*) /game/CharWidget.swf?login=%1
这使得url服务器端成为
/game/CharWidget.swf
,但不带有?char=username和make it?login=username,因此它不会显示我希望它显示的内容


编辑;如果做
/char/USERNAME
/game/CharWidget.swf?login=USERNAME
更容易,如果有人能给我代码,我不介意这样做。

查询字符串对
重写规则
不可见,因此
^index.php?char=(.*)
永远不会匹配。(除此之外,由于您没有转义
,因此它将匹配,例如
indexZphchar=foo
,这可能不是您想要的。)

此外,如果用户访问
/?char=USERNAME
,则
重写规则
通常只会看到
/
;没有
index.php
。最后,如果这是在.htaccess文件中,通常还需要一个
RewriteBase
指令

将所有这些修复放在一起,类似这样的东西应该可以工作:

RewriteEngine On
RewriteBase /

RewriteCond %{QUERY_STRING} ^char=(.*)$
RewriteRule ^/?(index\.php)?$ /game/CharWidget.swf?login=%1 [NS]
(regexp
^/?(index\.php)?$
将匹配空路径或
index.php
,带或不带前导斜杠。这使得它比绝对必要的更复杂,但也更健壮。特别是,
/?
允许它在.htaccess文件之外工作,前导斜杠将出现。)

另外,regexp
^char=(.*)$
还允许将类似于
/?char=foo&bar=baz
的URL重写为
/game/CharWidget.swf?login=foo&bar=baz
。如果您不想允许此类重写,请将其替换为,例如,
^char=([^&;]*)$


Edit:不幸的是,这些操作是在客户端执行的,因此不会看到服务器端重写对查询字符串所做的任何更改


您可以通过将
[NS]
标志替换为
[NS,L,R=302]
使重写成为外部重写。但是,这也会更改浏览器地址栏中显示的URL,这可能不是您想要的。如果是这样的话,另一种选择是让原始请求服务于一个HTML页面,在该页面上嵌入.swf文件。

我已经测试过了,但它不起作用。它基本上与我使用的代码相同,因此它可以很好地处理url,但不能处理urlquery@user3096760:这很有趣,因为,这对我很有用。你如何判断它“不做查询”?如果查询有效,但它不做,那么它会产生其他的结果it@user3096760:啊,这是因为.swf文件在客户端运行,因此看不到服务器端重写。请参见上面的编辑。谢谢,我将使用html而不是htaccess:)