이것에 대해 내 머리를 긁적입니다. 이전 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]
매력처럼 작동합니다