Apache 子域未正确捕获模式的mod_重写

Apache 子域未正确捕获模式的mod_重写,apache,mod-rewrite,Apache,Mod Rewrite,我有一个通配符虚拟主机,我符合以下条件: RewriteCond %{HTTP_HOST} ^([a-z0-9_\-]+)\.([\d]+)\.mydomain\.com [NC] 这条规则适用于: RewriteRule ^/?$ /index.php?customer=%1&cluster=%2&%{QUERY_STRING} [L] 但是,如果我试图将模式复杂化: RewriteRule ^([\w\-]+)/?$ /index.php?customer=%

我有一个通配符虚拟主机,我符合以下条件:

RewriteCond %{HTTP_HOST} ^([a-z0-9_\-]+)\.([\d]+)\.mydomain\.com [NC]
这条规则适用于:

RewriteRule ^/?$       /index.php?customer=%1&cluster=%2&%{QUERY_STRING} [L]
但是,如果我试图将模式复杂化:

RewriteRule ^([\w\-]+)/?$ /index.php?customer=%1&cluster=%2&load=$1&%{QUERY_STRING} [L]
它抓不住它。我错过了什么

根据上述规则: 使用第一条规则
第二条规则(即修改后的第一条规则)失败,只有一条规则

您的第二条规则不包含前导斜杠。假设您的规则在vhost上下文中,则需要该部分。具体来说,^[\w\-]+与/任何内容都不匹配。这会:^/[\w\-]+。

哦,哇,你说得对!我没有考虑^ /因为在旧的代码子域中,我们没有A/E,它工作得很好。而且,在旧代码中,它也不在vhost上下文中。真令人困惑!非常感谢。另外,^/[\w\-]+假设它匹配什么\字符类中的w只是一个文本w。为什么不直接输入w呢?它不是一个字母w,它匹配a-Z,a-Z,0-9。快乐的日子。本页很好地解释了这些上下文问题。别忘了打勾: