CentOS 7에서 .htaccess가 요청을 리디렉션하지 않는 이유는 무엇입니까?

CentOS 7에서 .htaccess가 요청을 리디렉션하지 않는 이유는 무엇입니까?

CentOS 7 및 Apache 2.4에서 실행되는 웹 애플리케이션은 최근 도메인 이름 olddomain.comnewdomain.com. 애플리케이션 구조 newdomain.com는 의 구조와 다르 olddomain.com므로 의 모든 요청은 olddomain.com/anyurl루트 URL로 리디렉션되어야 합니다 newdomain.com.

.htaccess새 파일을 만들고 httpd다시 시작했는데 왜 olddomain.com/testbadurl요청을 로 리디렉션할 수 없습니까 newdomain.com? 대신 사용자에게는 404 오류만 표시됩니다 olddomain.com/testbadurl.

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

# 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.


답변:


VirtualHost@garethTheRed는 파일 의 지침 에 대해 생각하게 했고 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 파일이 반환되는 시점에 재정의가 적용되지 않는다는 것입니다.

Apache 문서에 설명된 대로 mod_rewrite및 플래그 만 사용하여 프록시를 수행하는 방법에는 여러 가지가 있습니다.[P]여기. 이 경우 유용할 수 있습니다.

답변2

.hataccess가 제대로 작동하려면 "rewrite" 모듈을 활성화해야 합니다:

a2enmod rewrite
service httpd restart

관련 정보