重写规则不回溯参考

时间:2017-07-25 07:18:07

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

我有这个例子:

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 个答案:

答案 0 :(得分:1)

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

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

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

RewriteCond %{QUERY_STRING} game=(MyGame)
  

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

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

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

现在它将匹配“MyGame”或“OtherGame”或“Biliard”等,并且%1反向引用中保存了所有匹配项。