>

Apache 2.4가 설치된 CentOS 7에서 실행되는 웹 앱이 최근 도메인 이름을 olddomain.com 에서 변경했습니다.   newdomain.com 로 . newdomain.com 에서 앱의 구조   olddomain.com 와는 다릅니다 이므로 olddomain.com/anyurl 의 모든 요청  루트 URL newdomain.com 로 리디렉션해야합니다 .

새로운 .htaccess  파일이 생성되었으며 httpd   olddomain.com/testbadurl 에 대한 요청은 왜 다시 시작 되었습니까?   newdomain.com 로 리디렉션하지 못함 ?대신 사용자는 olddomain.com/testbadurl 에서 404 오류를 얻습니다. .

명령 줄에서 수행 한 단계는 다음과 같습니다.

# nano /etc/httpd/conf/httpd.conf
    <Directory "/var/www/html">
        AllowOverride All
    </Directory>
# sudo systemctl restart httpd
# cd /var/www/html
# nano /var/www/html/.htaccess
    Options +FollowSymLinks
    RewriteEngine On
    RewriteBase /
    RewriteCond %{HTTP_HOST} !^olddomain\.com$ [NC]
    RewriteRule ^(.*)$ http://newdomain.com [R=301,L]
# systemctl restart httpd

그런 다음 테스트 사용자 유형은 olddomain.com/testbadlink 입니다.  웹 브라우저에서. nano /var/log/httpd/olddomain_com_requests.log 의 로그   404 error 를 보여 .

<시간>

답변 :

<시간>

@garethTheRed가 VirtualHost 에 대해 생각하게했습니다.   httpd 의 지시문   conf  파일을 통해 궁극적으로 다음과 같은 답변을 개발하게되었습니다.이 답변을 통해 문제를 해결할 수 있습니다.

<VirtualHost www.olddomain.com:80>
    ServerName www.olddomain.com
    ServerAlias olddomain.com
    ErrorLog /var/log/httpd/olddomain_com_error.log
    CustomLog /var/log/httpd/olddomain_com_requests.log combined
    RedirectMatch ^(.*)$ http://newdomain.com
</VirtualHost> 

httpd 를 사용하는 것이 더 안전합니다.   conf  파일은 .htaccess 에 대한 외부 액세스를 허용하는 것보다이 작업을 수행합니다.  파일.

  • 답변 # 1

    이 답변으로 난간 위에 머릿속에 머리를 두겠습니다. 결국 답변을 삭제할 수 있습니다!

    Apache는 잘 정의되지 않은 순서로 모듈을 처리합니다. mod_info 를 활성화하여 처리 순서를 볼 수 있습니다  구성 단위. Fedora 22 설치에서는 다음과 같은 결과가 나타납니다. (정확한) :

    Post-Read Request: 
       -10 mod_http2.c 
       00 mod_headers.c 
       00 mod_remoteip.c 
       00 mod_proxy.c 
       10 mod_auth_digest.c 
       10 mod_http2.c 
       10 mod_reqtimeout.c 
       10 mod_setenvif.c 
       10 mod_unique_id.c 
    Header Parse: 
       10 mod_setenvif.c 
    HTTP Scheme: 
       30 http_core.c 
    Default Port: 
       30 http_core.c 
    Quick Handler: 
       00 mod_cache.c 
       00 mod_lua.c 
    Translate Name: 
       -1 mod_lua.c 
       00 mod_rewrite.c 
       00 mod_proxy.c 
       00 mod_proxy_express.c 
       10 mod_alias.c 
       10 mod_userdir.c 
       10 mod_vhost_alias.c 
       10 mod_lua.c 
       21 mod_lua.c 
       30 core.c
    
    

    mod_proxy.c  목록에서 첫 번째입니다.

    내 (매우 제한적인) 이해는 프록시 설정이 먼저 처리되어 WAR 파일이 반환되고 다시 쓰기가 적용되지 않는다는 것입니다.

    mod_rewrite 만 사용하여 프록시하는 방법이 있습니다  그리고 [P]  아파치 문서에 설명 된대로 플래그를 지정하십시오. 이 시나리오에서 유용 할 수 있습니다.

  • 답변 # 2

    .hatccess를 작동 시키려면 "rewrite"모듈을 활성화해야합니다 :

    a2enmod rewrite
    service httpd restart
    
    

관련 자료

  • 이전 logs - Apache는 error_log의 경로를 어떻게 해결합니까?
  • 다음 Fedora 22 - 페도라 22 - httpdservice를 다시 시작하지 못했습니다 : 액세스가 거부되었습니다