Apache-2.4
RewriteMap dbm .dir .pag
我一直在使用 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 文件。)