这是服务器上的 htaccess 文件

RewriteEngine On

RewriteBase /

RewriteCond %{HTTP_HOST} !^www.
RewriteCond %{HTTP_HOST} ^([a-z0-9]+)\.domain.com(.*)$
RewriteRule ^(.*)$ http://domain.com/test\.php?user=%1&path=%2 [R]

根据我对上述代码的理解,如果我请求 asher.domain.com/user 它应该重写为 http://domain.com/test.php?user=asher&path=/user 对吗?

相反,我得到 http://domain.com/test.php?user=asher&path= %2 是空的。但如果我使用 $1 而不是 %2 我似乎得到了正确的结果。

我可能正在犯有史以来最愚蠢的错误,但我不确定我的错误在哪里。帮帮我吧伙计们? %2 对我不起作用的重写规则中的错误在哪里?

最佳答案

使用 $ 语法为您提供 RewriteRule 反向引用,而 % 将为您提供 RewriteCond 反向引用。 mod_rewrite 文档涵盖了这一点。

在您的情况下,您的 RewriteRule 应如下所示:

RewriteRule ^(.*)$ http://domain.com/test\.php?user=%1&path=$1 [R]

因为您想要来自先前 RewriteCond 的第一组匹配以及来自当前 RewriteRule 的第一组匹配。

关于mod-rewrite - %2 的 RewriteCond 变量反向引用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9637693/

10-13 01:22