Apache httpd 未实现对 301 重定向配置的更新

Apache httpd 未实现对 301 重定向配置的更新

我在更新 Apache 服务器 (httpd、rhel) 中以前工作的重定向时遇到问题。我以前遇到过:

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

有效。

我将其改为:

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

现在它不起作用了。也就是说,当我尝试点击简单的http://<主机>/apidocsurl,当浏览器尝试从旧位置进行 GET 时,我会在响应标头中收到带有旧重定向位置的 301 错误,随后收到 404 错误。httpd 错误日志证实浏览器尝试 GET 旧目录:

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 cache 和 mod cache disk 模块,但没有 CacheRoot 等的配置,因此我添加了以下内容:

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

...随后验证它是否已被填充并使用 htcacheclean 清除它。

还有什么地方可能还会存在这些过时的 301 数据呢?

谢谢!Hans

答案1

首先,您需要解决语法错误,因此运行httpd -t,像这样(echo 部分除外),这样您就可以找出哪个配置文件包含语法错误:

[root@wcmisdlin02 conf.d]# echo blah >> 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 服务器版本 2.4,您的RedirectMatch看起来不错。您访问的虚拟主机正确吗?

答案2

...所以“答案”是问题的前提是错误的。 也就是说,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

相关内容