Назад | Перейти на главную страницу

Apache httpd не выполняет обновления конфигурации перенаправления 301

У меня возникла проблема с обновлением ранее работавшего перенаправления на моем сервере apache (httpd, rhel). Раньше у меня было:

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

который работал.

Я изменил его на:

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

и теперь это не работает. То есть, когда я пытаюсь поразить простое / apidocs rel = "nofollow noreferrer"> http: // <host> / apidocs url, я получаю 301 со старым местоположением перенаправления в заголовках ответа, за которым следует 404 в браузере, когда он пытается получить из старого местоположения. Журнал ошибок httpd подтверждает, что браузер пытался ПОЛУЧИТЬ старый каталог:

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

Делать service httpd reload или service 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, но безрезультатно.
Здесь стоит отметить, что ранее, хотя кеш модов и дисковые модули кеширования мод были загружены, конфигурация 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, как это (кроме части эха), таким образом вы можете выяснить, какой файл конфигурации содержит синтаксическую ошибку:

[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 - HTTP-сервер Apache версии 2.4, ваш RedirectMatch вроде нормально. Вы получаете доступ к правильному виртуальному хосту?