
내 Apache 서버(httpd, rhel)에서 이전에 작동했던 리디렉션을 업데이트하는 데 문제가 있습니다. 나는 이전에 다음을 경험했습니다.
RedirectMatch 301 ^/apidocs/ /old/specific/path/apidocs/
작동했습니다.
나는 그것을 다음과 같이 변경했습니다 :
RedirectMatch 301 ^/apidocs/ /new/specific/path/apidocs/
이제는 작동하지 않습니다. 즉, 간단한 것을 치려고 하면http://<호스트>/apidocsurl을 사용하는 경우 응답 헤더에 이전 리디렉션 위치가 포함된 301이 표시되고, 이전 위치에서 GET을 시도하면 브라우저에 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를 여러 번 중지하고 'graceful'을 시작했지만 소용이 없었습니다.
(5) apachectl -k stop/start를 사용해 보았으나 소용이 없었습니다.
(6) 이제 htcacheclean을 사용하여 캐시를 삭제해 보았지만 소용이 없었습니다.
이전에는 모드 캐시 및 모드 캐시 디스크 모듈이 로드되었지만 CacheRoot 등의 구성이 없었으므로 다음을 추가했습니다.
CacheEnable disk /
CacheRoot "/var/cache/httpd"
CacheDirLength 2
CacheDirLevels 2
...그리고 나중에 그것이 채워지고 있는지 확인하고 htcacheclean으로 지웠습니다.
이 오래된 301 데이터를 다른 어디에서 영속시킬 수 있습니까?
감사해요! 한스
답변1
먼저 구문 오류를 해결해야 하므로 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 - 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