我想实现此工具的映射问题,但我无法使其工作。这是规则:
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
没有任何反应。
我做错了什么?
谢谢!的
答案 0 :(得分:1)
很久以前就问过这个问题,但它仍然在那里,所以这里有一个答案:
你的规则中包含.asp,所以它在网址中查找。由于您只需要产品名称,请尝试此操作,而不需要规则中的.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)
原始参数附加到规则替换参数的末尾,根据文档确定并从日志文件中验证。
答案 1 :(得分:0)
我相信你的地图文件中的变量是错误的。第一个是匹配,第二个是替换:
2 law