.htaccess重写规则反向引用顺序

.htaccess重写规则反向引用顺序,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,我有一个关于htaccess重写规则的问题 是否可以转换此url: www.site.com/en/test 在这样的情况下: RewriteRule ^([a-z][a-z])/(.*)$ $2.php?language=$1 www.site.com/test.php?language=en 我试着用这个规则 RewriteRule ^([a-z][a-z])/(.*)$ $1.php?language=$2 但在一些在线测试工具中,结果URL是: www.site.com/en.php

我有一个关于htaccess重写规则的问题

是否可以转换此url:

www.site.com/en/test

在这样的情况下:

RewriteRule ^([a-z][a-z])/(.*)$ $2.php?language=$1
www.site.com/test.php?language=en

我试着用这个规则

RewriteRule ^([a-z][a-z])/(.*)$ $1.php?language=$2
但在一些在线测试工具中,结果URL是:

www.site.com/en.php?language=test

先谢谢你。
Mat

造成这种混乱的原因是您已反转了匹配。使用引用时,匹配中的第一个引用始终为$1,第二个引用为$2,依此类推

以下是您所做的,只看括号:

([a-z][a-z]) = first match, places "en" in $1 
(.*) = second match, places "test" in $2
因此,您只需在输出中反转它们,如下所示:

RewriteRule ^([a-z][a-z])/(.*)$ $2.php?language=$1

谢谢你的快速回复。我也尝试过改变反向引用顺序($1加$2),但没有任何改变。我使用这个工具进行测试:(如果你想尝试的话)这个工具不能正确处理反向引用。您可以输入任何数字,它仍将按照创建反向引用的顺序而不是按照您告诉它的顺序使用反向引用。在你说它不起作用之前,你需要在你的配置中尝试一下。