这是很久以前问过的,但它仍然存在,所以这里有一个答案:
您的规则中包含 .asp,因此它正在 url 中寻找它。由于您只需要产品名称,请尝试此操作,规则中不包含 .asp。
这适用于 isapi_rewrite v3:
RewriteMap mapfile txt:mapfile.txt [NC]
RewriteRule /([^/]+) /Products.asp?Prod=${mapfile:$1} [NC,QSA,L]
在mapfile上使用[NC]让你拥有law 2
不用担心大小写。(这是在很久以前的版本 3.1.0.62 和更新版本中。)
v3 处理规则之外的参数,因此规则不需要查找?
.
QSA 会将您的 Prod 参数附加到任何传入参数。由于您的规则在 停止?
,我假设您还想处理传入参数。所以参数将继续存在。
这使您的规则保持在斜杠处(在第一个斜杠之后),因此从斜杠开始的所有内容都将被忽略以进行匹配,并从结果中删除。
所以这将以这种方式重写网址:
/LAW to /Products.asp?Prod=2
/lAw to /Products.asp?Prod=2
/LAW?abc=123 to /Products.asp?Prod=2&abc=123
/LAW/ to /Products.asp?Prod=2
/LAW/?abc=123 to /Products.asp?Prod=2&abc=123 (slash is dropped, but parameters survive)
/LAW/morestuff to /Products.asp?Prod=2 (/morestuff is dropped)
/LAW/morestuff?abc=123 to /Products.asp?Prod=2&abc=123 (/morestuff is dropped, but the parameters survive)
原始参数附加到规则替换参数的末尾,由文档确定并从日志文件中验证。