【问题标题】:Rewrite Rule not working back reference重写规则不起作用回参考
【发布时间】:2017-12-30 23:24:22
【问题描述】:

我有这个例子:

RewriteCond %{QUERY_STRING} game=MyGame
RewriteRule ^games/freeGames?$ /flash/games/%1? [L,R=301]

我被重定向到主页。但如果我使用:

RewriteCond %{QUERY_STRING} game=MyGame
RewriteRule ^games/freeGames?$ /flash/games/MyGame? [L,R=301]

重定向工作正常。你能帮帮我吗?

另一个问题:%{QUERY_STRING} 和数组中是否有可能?例如 MyGame、OtherGame、Biliard 等?

提前谢谢,对不起我的英语

【问题讨论】:

  • 试试 $1 而不是 %1
  • @Bernhard 同样......

标签: php apache .htaccess mod-rewrite url-rewrite-module


【解决方案1】:
RewriteCond %{QUERY_STRING} game=MyGame
RewriteRule ^games/freeGames?$ /flash/games/%1? [L,R=301]

在此代码中,%1 反向引用始终为空,因为您尚未在前面的 RewriteCond 指令中定义捕获的组(即带括号的子模式)。因此,生成的 URL 总是 /flash/games/(我认为是您的“主页”)。

您需要通过括号中的字符串/正则表达式来定义捕获的组,例如:

RewriteCond %{QUERY_STRING} game=(MyGame)

另一个问题:在 %{QUERY_STRING} 和数组中有可能吗?例如 MyGame、OtherGame、Biliard 等?

如果您需要匹配多个项目,那么您可以在捕获的组中使用 alternation。例如:

RewriteCond %{QUERY_STRING} game=(MyGame|OtherGame|Biliard|etc.)

现在它将匹配“MyGame”或“OtherGame”或“Biliard”等,并且任何匹配都保存在%1 反向引用中。

【讨论】:

    猜你喜欢
    • 2013-07-06
    • 1970-01-01
    相关资源
    最近更新 更多