首页 文章

如何检查uri是否存在于rewritemap其他goto 404页面?

提问于
浏览
1

我的要求是检查重写映射文件中是否存在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.接下来我将规则详细说明为如果映射中不存在则转到ErrorDocument;别的重定向 . 如下:

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传递到条件检查映射条目的部分 . 如何解决这个问题?我的问题还有更好的解决方案吗?

1 回答

  • 3

    不, $1 不返回URL . 它返回当前 RewriteRule 正则表达式中捕获的第一个组的结果 .

    您实际上是在使用 Map 更改网址,还是只是对其进行测试?如果它只是一个测试,您只需要:

    RewriteMap plp-map  dbm:${http.server.install.base}/dynamicmaps/plp-map
    ErrorDocument 404 /content/homedepot_ca/en_ca/home/errors/404.html
    
    RewriteCond ${plp-map:$1} =""
    RewriteRule ^(/en/home/categories/.*)$ - [R=404,L]
    

    如果您还要更改它,请在上面添加之后添加:

    RewriteCond ${plp-map:$1} !=""
    RewriteRule ^(/en/home/categories/.*)$ ${plp-map:$1} [PT,QSA]
    

相关问题