【问题标题】:Why doesnt this htaccess rewrite work?为什么这个 htaccess 重写不起作用?
【发布时间】:2014-10-24 23:44:57
【问题描述】:

好的,我正在努力做到这一点,如果人们转到/?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 并使其成为 ?login=username 所以它不会显示我想要显示的内容。

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

【问题讨论】:

    标签: .htaccess flash


    【解决方案1】:

    查询字符串对RewriteRules 不可见,因此^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 之类的URL 重写为/game/CharWidget.swf?login=foo&bar=baz。如果您不想允许此类重写,请将其替换为例如^char=([^&;]*)$.


    编辑:不幸的是,this isn't going to work for .swf files,因为它们在客户端上执行,因此不会看到服务器端重写对查询字符串所做的任何更改。

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

    【讨论】:

    • 我已经对此进行了测试,但它没有用。它基本上与我使用的代码相同,所以它可以很好地处理 url 但不是查询
    • @user3096760:这很有趣,因为I just tested it too,它对我有用。你怎么知道它“不做查询”?
    • 好吧,如果查询有效但它不这样做,它会提出其他问题
    • @user3096760:啊,这是因为 .swf 文件在客户端上运行,所以看不到服务器端的重写。请参阅上面的编辑。
    • 谢谢,我用 html 代替 htaccess :)
    猜你喜欢
    • 2017-06-12
    • 2011-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-28
    相关资源
    最近更新 更多