0

次の書き換えルールがあります。

RewriteRule ^/events$ /pagebase.php?pbid=3627 [QSA,L,I]
RewriteRule ^/events-list$ /pagebase.php?pbid=3663 [QSA,L,I]
RewriteRule ^/bob2013$ /pagebase.php?pbid=3688 [QSA,L,I]
RewriteRule ^/contact-us$ /pagebase.php?pbid=3634 [QSA,L,I]
RewriteRule ^/detail$ /pagebase.php?pbid=3890 [QSA,L,I]

クエリ文字列を渡す必要があるまで、これはうまく機能します。

だから私がタイプすると

http://www.domain.com/events 完全に機能します。

しかし、私が入力すると

http://www.domain.com/events?type=1

その後、「イベント」と一致しなくなったため、書き換えは失敗します。

ただし、ドル記号を削除すると、正常に機能します。クエリ文字列の型は正しく渡されます。

そのようです。

RewriteRule ^/events$ /pagebase.php?pbid=3627 [QSA,L,I]

ただし、問題は、誰かがイベント リストの URL を入力した場合です。

http://www.domain.com/events-list

書き換えは「イベント」ページに一致し、そのページが表示されます。

基本的に、この問題を回避する方法を知る必要があります。

4

1 に答える 1

1

これに対する最も簡単な解決策は、それに応じてルールを並べることです。特定のルールを一般的なルールの前に配置します

最初のルール ($最後に がない) には 2 番目のルールが含まれているため、2 番目のルールを最初のルールの前に置きます。

RewriteRule ^/events-list /pagebase.php?pbid=3663 [QSA,L,I]
RewriteRule ^/events      /pagebase.php?pbid=3627 [QSA,L,I]

これで、 で始まるすべての URL/events-listが に書き換えられpbid=3663ます。

ただし、 のような URL が一致しないようにするには、オプションのクエリ文字列/events-anythingの一致をルールに含めることをお勧めします。

RewriteRule ^/events-list(\?.*)?$ /pagebase.php?pbid=3663 [QSA,L,I]
RewriteRule ^/events(\?.*)?$      /pagebase.php?pbid=3627 [QSA,L,I]
于 2013-01-13T14:27:17.487 に答える