我有 apache 2.4 并且正在使用 RewriteMap DBM 文件。
IE:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteMap examplemap "dbm:/etc/httpd/conf/rewrite.dbm"
RewriteCond ${examplemap:$1} !=""
RewriteRule ^(.*) /${examplemap:$1} [R=301,L]
</IfModule>
<VirtualHost *:80>
DocumentRoot /var/www/sites/me
Options +FollowSymLinks +Indexes
RewriteEngine On
RewriteOptions Inherit
RewriteMap redirects "dbm:/etc/httpd/conf/redirects.dbm"
RewriteCond ${redirects:$1} !=""
RewriteRule ^(/.*) /${redirects:$1} [R=301,L]
</VirtualHost>
我需要能够证明当发出请求并且在第一个 dbm 文件 (rewrite.dbm) 中发现条件时,第二个 dbm 文件 (redirects.dbm) 未被加载到内存中
据我所知,我读过的各种资料中,这两个文件都已加载到内存中。对吗?
原因是 rewrite.dbm 只包含大约 300 次重写,但会频繁更改(每天)。redirects.dbm 一旦加载就永远不会更改,并且将包含大约 30,000 次重定向。
如果只需要第一个 dbm 文件,则客户端希望确保第二个 DBM 文件不会被加载到内存中和/或减慢请求时间。
我认为流程应该是这样的:
如果 /abc 在 rewrite.dbm 结尾并显示页面
如果 /abc 不在 rewrite.dbm 中,则搜索 redirects.dbm
如果 /abc 不在任一位置,则抛出 404
希望我问得清楚。