書き直そうとして
site-search.html?searchword=search%20term
なので
advanced-search#q=search%20term
私はいつもadvanced-search#q=%3Fsearchword%3search%20term
で終わります
%3Fsearchword%3
の部分は、検索語の直前に生成されたURLに不思議なことに追加されます。
私が実施しているルールは次のようになります。
RewriteCond %{REQUEST_URI} ^/site-search\.html$
RewriteCond %{QUERY_STRING} ^searchword=(.*)$
RewriteRule ^(.*)$ http://www.example.com/advanced-search#q=%1 [R=301,L,NE]
「q =」の後に何を置いても違いはないことは言及する価値があります。関係なく、同じエラーまたはtoのわずかな変化が発生します。
RewriteRuleの%1は、同じRewriteRule(。*)の条件から取得され、そこでクエリ文字列をURI自体と照合します。
解決策1:2番目のRewriteCondのパターンをRewriteRuleの条件に移動またはコピーします。
コメントと、何に到達したいのかという仮定に基づいて、どういうわけか次のようになります。
RewriteCond %{HTTP_Host} ^(www\.)?domain.com$
RewriteCond %{REQUEST_URI} ^/site-search\.html$
RewriteRule [?&]searchword=([^&]*) http://www.domain.com/advanced-search#q=%1 [R=301,L,NE]
解決策2:RewriteRuleの[QSA]フラグを調べます。これにより、クエリ文字列全体が結果のuriに追加されます。 (Apache 2.2用ではありません)
一致するようにパッテンを微調整し、?を追加した後ターゲットURLに対して、構文は最終的に意図したとおりに機能します。
RewriteCond %{REQUEST_URI} ^/site-search\.html$
RewriteCond %{QUERY_STRING} ^searchword=([^&]+)
RewriteRule ^([^&]+) http://www.domain.com/advanced-search?#q=%1 [R=301,L,NE]
?ターゲットURLにあると、元のクエリ文字列が再記述されなくなります。 Apache 2.4を実行している場合は、QSDフラグを再配線ルールに渡すことで同じ結果を得ることができます。
また、ターゲットURLに#(フラグメント識別子)が含まれている場合は、必ず?を配置してください。その前に