2

これらの書き直しがあります。最初の (ギャラリー用) は期待どおりに機能します。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」を追加します。

4

1 に答える 1

1

新しいクエリ文字列を保持していない場合、置換 URL の末尾に疑問符を配置しない限り、自動的に追加されるためです。

既存のクエリ文字列を消去したい場合は、置換文字列をクエスチョン マークだけで終了します」。

この Apache リンクでタイトルのModifying the Query Stringを確認してください。

あなたの質問:

最初の書き換え(ギャラリー用)には ? がないため、非常に混乱します。

その理由は、最初の書き換え規則です。

RewriteRule ^gallery\.php$ http://www.domain.com/gallery?set=%1 

新しいクエリ文字列を作成し、その場合、 QSAフラグを使用して明示的に行わない限り、入力クエリ文字列は自動的に追加されません。

于 2013-03-20T05:17:08.287 に答える