我的要求是检查重写映射文件中是否存在 url。如果不存在,它应该显示带有状态码 404 的自定义 404 页面。
最初这段代码的目的是:
RewriteMap plp-map dbm:${http.server.install.base}/dynamicmaps/plp-map
RewriteCond %{REQUEST_URI} ^/en/home/categories/.*
RewriteRule ^(.*) ${plp-map:$1|/content/mysite/en_ca/home/errors/404.html} [PT,QSA]
它正在为 /invalid.html 加载自定义 404 页面。但是状态是200。接下来我将规则详细说明为goto ErrorDocument if not exist in map; 否则重定向。如下:
RewriteCond %{REQUEST_URI} ^/en/home/categories/.*
RewriteMap plp-map dbm:${http.server.install.base}/dynamicmaps/plp-map
RewriteCond ${plp-map:$1} =""
RewriteRule .? - [S=2]
RewriteCond %{REQUEST_URI} ^/en/home/categories/.*
RewriteRule ^(.*) ${plp-map:$1} [PT,QSA]
RewriteRule .? - [S=1]
RewriteRule ^(.*)$ - [L,R=404]
ErrorDocument 404 /content/homedepot_ca/en_ca/home/errors/404.html
现在这条规则在第三行 RewriteCond ${plp-map:$1} ="" 失败并出现错误
map lookup FAILED: map=plp-map[dbm] key=
$1 不应该总是返回网址吗?不知何故,我错过了将 url 传递给条件检查映射条目的部分。如何解决这个问题?我的问题还有更好的解决方案吗?