아파치는 여러 조건을 다시 작성


9

기존 도메인 이름 (예 : olddomain.com)에서 새 도메인 이름 (예 : newdomain.com)으로 마이그레이션 된 웹 사이트가 있습니다.

SEO상의 이유로 모든 웹 사이트 트래픽을 기본 새 도메인 이름 (예 : www.newdomain.com)으로 다시 작성해야합니다. 불행히도 여러 OR 유형 다시 쓰기 조건을 추가하는 방법을 모르겠습니다. 모든 조건, 아래 샘플 코드로 AND 조건을 얻는 것 같습니다.

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName newdomain.com
        ServerAlias www.newdomain.com
        ServerAlias olddomain.com
        ServerAlias www.olddomain.com
        DocumentRoot /var/www/newdomain.com/www/
        <Directory />
                Options FollowSymLinks
                AllowOverride All
        </Directory>

        ErrorLog /var/log/apache2/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        RewriteEngine on
        RewriteCond %{HTTP_HOST} ^olddomain.com [NC]
        RewriteCond %{HTTP_HOST} ^www.olddomain.com [NC]
        RewriteCond %{HTTP_HOST} ^newdomain.com [NC]
        RewriteRule ^/(.*)$ http://www.newdomain.com/$1 [R=301,NC]

        CustomLog /var/log/apache2/access.log combined
</VirtualHost>

누군가 나에게 약간의 도움을 줄 수 있습니까? 도움을 주시면 감사하겠습니다.

답변:


16

당신은 당신이 이미 솔루션을 작업 발견 한 사실에도 불구하고, 나는 아직도이를 게시 할 예정입니다 지금까지 최적의 것을.

솔루션 # 1 : 교체 [NC]에 의해 [NC,OR]원래의 코드의 처음 2 개한다 RewriteCond 라인이다. 기본적으로 하나의 RewriteCond가 logical로 다른 RewriteCond에 연결되었습니다 AND. 이것은 아파치에게 OR로직 을 사용하도록 지시합니다 :

RewriteCond %{HTTP_HOST} ^olddomain.com [NC,OR]
RewriteCond %{HTTP_HOST} ^www.olddomain.com [NC,OR]
RewriteCond %{HTTP_HOST} ^newdomain.com [NC]
RewriteRule ^/(.*)$ http://www.newdomain.com/$1 [R=301,L,NC]

해결 방법 # 2 : 총 4 개의 도메인 이름 만 있으므로 올바른 방법을 제외한 모든 도메인에서 리디렉션하는 반대 접근 방식을 사용하는 것이 훨씬 쉽습니다.

RewriteCond %{HTTP_HOST} !^www.newdomain.com [NC]
RewriteRule ^/(.*)$ http://www.newdomain.com/$1 [R=301,L,NC]

당신이 가지고있는 경우에 비록 솔루션 # 2, 더 나은 하나입니다 www.newdomain.comtest.newdomain.com또는 그런 일이,에 대해 일치 좋을 것 !newdomain.com$"thisisanoldnewdomain.com"와 같은 "newdomain.com"긴 이전 도메인은 끝나지 않았다처럼. # 1의 요점까지는 어디에도 [OR] 문서가 없습니다. 정말 작동합니까?
DerfK

@DerfK의 문서는 : - 당신은 꽤 스크롤해야 "| OR 대신 암시과의 로컬과 규칙 조건을 결합 할 때 사용 (또는 다음 조건) 'OR ornext'."
LazyOne

1

이 인용문을 찾았습니다.

rewriteCond는 그 뒤에 오는 단일 rewriteRule에만 적용됩니다.

여기 : http://www.webmasterworld.com/apache/3350200.htm

나에게 맞는 해결책은 다음과 같습니다.

    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^olddomain.com [NC]
    RewriteRule ^/(.*)$ http://www.newdomain.com/$1 [R=301,NC]

    RewriteCond %{HTTP_HOST} ^www.olddomain.com [NC]
    RewriteRule ^/(.*)$ http://www.newdomain.com/$1 [R=301,NC]

    RewriteCond %{HTTP_HOST} ^newdomain.com [NC]
    RewriteRule ^/(.*)$ http://www.newdomain.com/$1 [R=301,NC]

1
몇 년 후 이곳을 방문하는 다른 사람들에게 참고로, 특히 LazyOne이 제안한 솔루션 (OP에 의해 수용 됨)은 특히 2 ~ 3 개 이상의 조건이있는 경우 훨씬 최적화되어 OR있습니다.
독터 J
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.