소스에 '?'가 포함된 경우 규칙 다시 쓰기

소스에 '?'가 포함된 경우 규칙 다시 쓰기

이것에 대해 내 머리를 긁적입니다. 이전 URL이 있습니다.

     http://myserver/blog/archive?openview&type=Category&key=Demo

그리고 새로운 URL

     http://myserver/blog/categories/Demo

이에 대한 다시 쓰기 규칙을 얻으려고합니다. 나는 그것이 될 것이라고 생각했습니다 :

     ^/blog/archive\?openview&type=Category&key=(.*) /blog/categories/$1.html [NC,R=301,L]

하지만 그건 아무 소용이 없습니다. URL과 규칙을 사용해 보았습니다(?를 /로 대체).

     http://myserver/blog/archive/openview&type=Category&key=Demo
     ^/blog/archive/openview&type=Category&key=(.*) /blog/categories/$1.html [NC,R=301,L]

그리고 그것은 예상대로 작동합니다. 그래서 나는 ? 이전 URL과 일치하는지 확인하세요. 내가 찾은 모든 샘플은 반대 사례를 설명합니다. "예쁜" URL을 못생긴 URL로 보냅니다. 내 경우에는 "추악한" URL은 과거 사람들이 북마크에 추가한 URL이므로 그들이 새 데이터에 제대로 접근할 수 있는지 확인하고 싶습니다.

답변1

약간의 생각(그리고 독서문서) 나중에:

mod_rewrite 일치는 URL의 위치 부분만 사용합니다. "?" 위치의 끝과 매개변수(QueryString이라고도 함)의 시작을 표시합니다. 그걸 깨닫고 나니 그냥 그랬다.Google 멀리.

따라서 올바르게 변환하려면 다시 작성 조건이 필요합니다.

RewriteCond %{QUERY_STRING}     ^openview&type=Category&key=(.*)    [NC]
RewriteRule ^/blog/archive$ /blog/categories/%1.html [NC,R=301,L]

매력처럼 작동합니다

관련 정보