1

我想实现这个工具的映射问题,我不能让它工作。这是规则:

RewriteBase /
RewriteMap mapfile txt:mapfile.txt
RewriteRule /([^?/]+)\.asp /Products.asp?Prod=${mapfile:$1}

例如,我希望我网站上的每个文件都采用这种格式: /products.asp?prod=2

  • 替换为/LAW
  • 或者至少/products-LAW

我创建了一个名为 mapfile.txt 的地图文件,将它与 .htaccess 文件一起放在根 Web 文件中。我只写了一行

law 2

什么也没有发生。

我究竟做错了什么?

谢谢!

4

2 回答 2

1

这是很久以前问过的,但它仍然存在,所以这里有一个答案:

您的规则中包含 .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)

原始参数附加到规则替换参数的末尾,由文档确定并从日志文件中验证。

于 2011-07-04T15:14:18.400 回答
0

我相信您的地图文件中的变量方式错误。第一个 var 是匹配项,第二个是替换项:

2   law
于 2009-12-16T13:40:13.297 回答