Apache-2.4

RewriteMap dbm .dir .pag

  • September 20, 2018

我一直在使用 RewriteMap dbm,我能夠使用文本版本,但是無法弄清楚我如何或為什麼會收到下面描述的錯誤。

虛擬主機:

<VirtualHost *:80>
DocumentRoot /var/www/sites/me
ServerName domain.com
RewriteEngine On
RewriteMap examplemap "dbm:/etc/httpd/conf/redirects.db"
RewriteRule (.*) ${examplemap:$1}
</VirtualHost>

當我嘗試重新啟動 httpd 時,它會引發錯誤:

[root@mail me]# httpd -t
AH00526: Syntax error on line 367 of /etc/httpd/conf/httpd.conf:
RewriteMap: file for map examplemap not found:/etc/httpd/conf/redirects.dbm.dir

.dir 來自哪裡?

我創建了一個 httxt2dbm 文件 redirects.db.dir ,這使錯誤消失了。

幾個問題,如果我編輯行:

RewriteMap examplemap "dbm:/etc/httpd/conf/redirects.db"

到:

RewriteMap examplemap "dbm:/etc/httpd/conf/redirects.db.dir"

我得到:

RewriteMap: file for map examplemap not found:/etc/httpd/conf/redirects.dbm.dir.dir

第二個問題:

[root@mail me]# tail -f /var/log/httpd/error_log
[Wed Sep 19 20:32:42.282075 2018] [rewrite:error] [pid 4136] (2)No such file or directory: [client 50.76.6.29:56744] AH00663: mod_rewrite: can't access DBM RewriteMap file /etc/httpd/conf/redirects.db.pag

頁面文件來自哪裡?

我怎樣才能讓這快樂和工作?

是的,只創建了一個文件:

httxt2dbm -f db -i /etc/httpd/conf/redirects.txt -o /etc/httpd/conf/redirects.db

如果您在創建文件時將db(即 Berkeley DB)指定為 DBM 類型(-f DBM_TYPE參數),那麼您可能也應該在RewriteMap指令中包含此 dbm 類型。.dir並且.pag不是 Berkeley DB 文件,所以我懷疑 Apache 正在SDBM為您的重寫映射使用另一個預設值(也許?)。

例如:

RewriteMap examplemap "dbm=db:/etc/httpd/conf/redirects.db"

-f db或者,在創建數據文件時刪除參數(使用httxt2dbm),以便 Apache 使用其預設值。(除非您特別想要 Berkeley DB 文件。)

引用自:https://serverfault.com/questions/931763