.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:)