如何检查 uri 是否存在于 rewritemap else goto 404 页面中?
How to check is uri exists in rewritemap else goto 404 page?
我的要求是检查 url 是否存在于重写映射文件中。如果不存在,它应该显示状态代码为 404 的自定义 404 页面。
最初这段代码的用途是:
RewriteMap plp-map dbm:${http.server.install.base}/dynamicmaps/plp-map
RewriteCond %{REQUEST_URI} ^/en/home/categories/.*
RewriteRule ^(.*) ${plp-map:|/content/mysite/en_ca/home/errors/404.html} [PT,QSA]
正在加载 /invalid.html 的自定义 404 页面。但是状态是 200。接下来我将规则详细说明为 goto ErrorDocument if not exists in map;否则重定向。如下:
RewriteCond %{REQUEST_URI} ^/en/home/categories/.*
RewriteMap plp-map dbm:${http.server.install.base}/dynamicmaps/plp-map
RewriteCond ${plp-map:} =""
RewriteRule .? - [S=2]
RewriteCond %{REQUEST_URI} ^/en/home/categories/.*
RewriteRule ^(.*) ${plp-map:} [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 不应该总是 return url 吗?不知何故,我错过了将 url 传递到条件检查地图条目的部分。如何解决这个问题?还有我的问题有更好的解决方案吗?
不,</code> 不 return URL。它 return 是您当前 <code>RewriteRule
正则表达式中捕获的第一组的结果。
您实际上是在用您的地图更改 URL,还是只是测试一下?如果只是测试,你只需要:
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:} =""
RewriteRule ^(/en/home/categories/.*)$ - [R=404,L]
如果您也要更改它,请在上面的内容之后添加:
RewriteCond ${plp-map:} !=""
RewriteRule ^(/en/home/categories/.*)$ ${plp-map:} [PT,QSA]
我的要求是检查 url 是否存在于重写映射文件中。如果不存在,它应该显示状态代码为 404 的自定义 404 页面。
最初这段代码的用途是:
RewriteMap plp-map dbm:${http.server.install.base}/dynamicmaps/plp-map
RewriteCond %{REQUEST_URI} ^/en/home/categories/.*
RewriteRule ^(.*) ${plp-map:|/content/mysite/en_ca/home/errors/404.html} [PT,QSA]
正在加载 /invalid.html 的自定义 404 页面。但是状态是 200。接下来我将规则详细说明为 goto ErrorDocument if not exists in map;否则重定向。如下:
RewriteCond %{REQUEST_URI} ^/en/home/categories/.*
RewriteMap plp-map dbm:${http.server.install.base}/dynamicmaps/plp-map
RewriteCond ${plp-map:} =""
RewriteRule .? - [S=2]
RewriteCond %{REQUEST_URI} ^/en/home/categories/.*
RewriteRule ^(.*) ${plp-map:} [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 不应该总是 return url 吗?不知何故,我错过了将 url 传递到条件检查地图条目的部分。如何解决这个问题?还有我的问题有更好的解决方案吗?
不,</code> 不 return URL。它 return 是您当前 <code>RewriteRule
正则表达式中捕获的第一组的结果。
您实际上是在用您的地图更改 URL,还是只是测试一下?如果只是测试,你只需要:
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:} =""
RewriteRule ^(/en/home/categories/.*)$ - [R=404,L]
如果您也要更改它,请在上面的内容之后添加:
RewriteCond ${plp-map:} !=""
RewriteRule ^(/en/home/categories/.*)$ ${plp-map:} [PT,QSA]