
У меня возникла проблема с обновлением ранее работающего редиректа на моем сервере Apache (httpd, rhel). Раньше у меня было:
RedirectMatch 301 ^/apidocs/ /old/specific/path/apidocs/
что сработало.
Я изменил это на:
RedirectMatch 301 ^/apidocs/ /new/specific/path/apidocs/
и теперь это не работает. То есть, когда я пытаюсь нажать на простуюhttp://<хост>/apidocsurl, я получаю 301 со старым местоположением перенаправления в заголовках ответа, а затем 404 в браузере, когда он пытается GET из старого местоположения. Журнал ошибок httpd подтверждает, что браузер пытался GET старый каталог:
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, но безрезультатно.
Здесь стоит отметить, что ранее, хотя модули mod cache и mod cache disk загружались, не было никакой конфигурации CacheRoot и т. д., поэтому я добавил следующее:
CacheEnable disk /
CacheRoot "/var/cache/httpd"
CacheDirLength 2
CacheDirLevels 2
...и впоследствии проверил, что он заполняется, и очистил его с помощью htcacheclean.
Где еще могут храниться эти устаревшие данные 301?
Спасибо! Ганс
решение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, запущенный с моей локальной машины, перенаправляется на старый redirect-url, в то время как
2. wget, запущенный с сервера, корректно перенаправляется на новый redirect-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