mod_rewrite를 사용하여 단일 페이지 리디렉션

mod_rewrite를 사용하여 단일 페이지 리디렉션

첫 번째 요구 사항은 트래픽을 에서 로 리디렉션하는 것이었지만 http://www.old-domain.org도메인 https://example.press루트에 대해서만 그렇게 해야 했습니다. 특정 페이지는 이전 도메인에서 사용할 수 있어야 합니다.

그래서 나는 약간의 연구를 했고 이것이 효과가 있었습니다:

RedirectMatch "^/$" "https://example.press"

(흥미롭게도,https://htaccess.madewithlove.be/작동하지 않는다고 주장했습니다...)

그런 다음 다음 요청이 들어왔습니다. 다음 형식의 다른 URL도 리디렉션합니다.

http://www.old-domain.example/site/index.php?act=news

, 그러나 특정 뉴스 기사가 요청된 경우 리디렉션되지 않는 방식입니다(예: http://www.old-domain.org/site/index.php?act=news&id=12345)

이것은 매우 어려운 일이었습니다. 많은 문서와 기사에서 이는 Redirect/ 지시어 로는 불가능 RedirectMatch하지만 RewriteCond+ 로는 가능하다고 언급했습니다 RewriteRule. 제가 모은 내용은 다음과 같습니다.

<IfModule mod_rewrite.c>
          RewriteEngine On
          RewriteCond %{QUERY_STRING} act=news
          RewriteRule ^(.*)$ https://example.press [R=302,L]
</IfModule>

(다시,https://htaccess.madewithlove.be/효과가 있다고 주장함)

그러나 아무것도 작동하지 않는 것 같습니다. 리디렉션이 발생하지 않습니다. 내 입장에서 눈에 띄게 명백한 오해가 있습니까?

답변1

나는 이것이 효과가 있을 것이라고 믿습니다:

<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{QUERY_STRING} act=news RewriteCond %{QUERY_STRING} !act=news&id=12345 RewriteRule ^(.*)$ https://example.press/ [R=302,L] RewriteRule ^/$ https://example.press/ [R=302,L] </IfModule>

두 가지 규칙이 있으며 첫 번째 규칙에는 두 가지 조건이 있습니다. 첫 번째 규칙의 두 번째 조건은 연산자를 사용하여 !일치를 무효화합니다 act=news&id=12345. 첫 번째 규칙의 조건 사이에는 암시적인 "AND"가 있으므로 둘 다 참이어야 합니다.

그런 다음 두 번째 규칙은 /조건 없이 페이지와만 일치합니다.

관련 정보