Httpd

Apache httpd 未實現對 301 重定向配置的更新

  • April 30, 2015

我在更新我的 apache 伺服器(httpd、rhel)中以前工作的重定向時遇到問題。我以前有:

RedirectMatch 301 ^/apidocs/ /old/specific/path/apidocs/

這有效。

我將其更改為:

RedirectMatch 301 ^/apidocs/ /new/specific/path/apidocs/

現在它不起作用。也就是說,當我嘗試點擊簡單的http://<host>/apidocs url 時,當它嘗試從舊位置。httpd 錯誤日誌證實瀏覽器試圖獲取舊目錄:

File does not exist: /var/www/html/old

執行service httpd reloadservice httpd force-reload僅產生以下單行輸出:

Reloading httpd:

……所以它大概是成功的。還,

(1) httpd 啟動時,它的錯誤日誌沒有任何抱怨。

(2)執行apachectl configtest產生Syntax OK

(3)執行httpd -t產生Syntax OK

(4) 我已經多次停止並“優雅”啟動 httpd,但無濟於事。

(5) 我嘗試使用 apachectl -k stop/start,但無濟於事。

(6) 我現在也嘗試使用 htcacheclean 清除記憶體,但無濟於事。

這裡值得注意的是,之前雖然載入了mod記憶體和mod記憶體磁碟模組,但沒有配置CacheRoot等,因此我添加了以下內容:

CacheEnable disk /
CacheRoot "/var/cache/httpd"
CacheDirLength 2
CacheDirLevels 2

…並隨後驗證它正在被填充並使用 htcacheclean 清除它。

這種陳舊的 301 數據還能在哪裡繼續存在?

謝謝!漢斯

…所以“答案”是問題的前提是錯誤的。 也就是說,apache httpd 正確地完成了它的工作。真正的問題是在伺服器上的 httpd 和我的本地機器之間有一個記憶體層。 我以此作為證據:

  1. 從我的本地電腦執行的 wget 被重定向到舊的重定向 URL,而

  2. 從伺服器執行的 wget 被正確重定向到新的重定向 URL,

並且訪問日誌前者看起來像:

"GET /old/specific/path/apidocs/ HTTP/1.1" 404

而後者產生:

"GET /apidocs/ HTTP/1.0" 301
"GET /new/specific/path/apidocs/ HTTP/1.0" 200

首先,你需要解決語法錯誤,所以httpd -t像這樣執行(除了 echo 部分),這樣你就可以找出哪個配置文件包含語法錯誤:

[root@wcmisdlin02 conf.d]# echo blah &gt;&gt; php.conf 
[root@wcmisdlin02 conf.d]# httpd -t
AH00526: Syntax error on line 33 of /etc/httpd/conf.d/php.conf:
Invalid command 'blah', perhaps misspelled or defined by a module not included in the server configuration
[root@wcmisdlin02 conf.d]# 

根據mod_alias - Apache HTTP Server Version 2.4,你RedirectMatch看起來不錯。您訪問的是正確的虛擬主機嗎?

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