这是服务器上的 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/