关于 DBM 文件及其工作原理的一些困惑

关于 DBM 文件及其工作原理的一些困惑

我有 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 文件不会被加载到内存中和/或减慢请求时间。

我认为流程应该是这样的:

http://example.com/abc

如果 /abc 在 rewrite.dbm 结尾并显示页面

如果 /abc 不在 rewrite.dbm 中,则搜索 redirects.dbm

如果 /abc 不在任一位置,则抛出 404

希望我问得清楚。

相关内容