Apache RewriteRule 쿼리스트링 처리 차이 확인.
비슷해 보이는 두 규칙.
RewriteRule ^(.*)$ https://example.co.jp/? [R=302,L]
RewriteRule ^(.*)$ https://example.co.jp/ [R=302,L]
첫 번째.
RewriteRule ^(.*)$ https://example.co.jp/? [R=302,L]
요청.
/page?foo=bar&baz=qux
결과.
https://example.co.jp/
쿼리스트링 버림.
두 번째.
RewriteRule ^(.*)$ https://example.co.jp/ [R=302,L]
요청.
/page?foo=bar&baz=qux
결과.
https://example.co.jp/?foo=bar&baz=qux
쿼리스트링 유지.
Apache mod_rewrite 기본 동작.
쿼리스트링은 기본적으로 유지됨.
그래서.
?
쿼리스트링을 명시적으로 비움.
/
아무 지정 없음.
기본값으로 쿼리스트링 유지.
Apache 2.4 이상에서는 QSD 사용.
RewriteRule ^(.*)$ https://example.co.jp/ [R=302,L,QSD]
QSD.
Query String Discard.
쿼리스트링 유지하고 싶으면 기본값 그대로.
RewriteRule ^(.*)$ https://example.co.jp/ [R=302,L]
명시적으로 유지하려면 QSA.
RewriteRule ^(.*)$ https://example.co.jp/ [R=302,L,QSA]
정리.
Apache 2.2 이전.
쿼리스트링 버림.
RewriteRule ^(.*)$ https://example.co.jp/? [R=302,L]
쿼리스트링 유지.
RewriteRule ^(.*)$ https://example.co.jp/ [R=302,L]
Apache 2.4 이상.
쿼리스트링 버림.
RewriteRule ^(.*)$ https://example.co.jp/ [R=302,L,QSD]
쿼리스트링 유지.
RewriteRule ^(.*)$ https://example.co.jp/ [R=302,L]
앞으로는 ? 붙여서 버리는 방식보다 QSD 쓰는 게 낫다.