これらの書き直しがあります。最初の (ギャラリー用) は期待どおりに機能します。2 番目 (写真用) は機能しますが、クエリ文字列が繰り返されます。したがって、次のアドレスに転送されます: http://www.domain.com/photo-TheID?id=TheID
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /gallery\.php\?set=([^/]*)\ HTTP/
RewriteRule ^gallery\.php$ http://www.domain.com/gallery?set=%1 [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /photo\.php\?id=([^/]*)\ HTTP/
RewriteRule ^photo\.php$ http://www.domain.com/photo-%1 [R=301,L]
ただし、追加すると?それを作るrewriteruleの最後まで
RewriteRule ^photo\.php$ http://www.domain.com/photo-%1? [R=301,L]
その後、期待どおりに転送されます: http://www.domain.com/photo-TheID
私の質問は、「?」なしでそのクエリ文字列が繰り返されるのはなぜですか? 最後に?最初のリライト(ギャラリー用)には ? がないため、非常に混乱します。ただし、クエリ文字列は繰り返されません。追加すると?ギャラリー rewriterule の末尾に、URL の末尾に「%3f」を追加します。