0

開発環境で mod_rewrite を使用しています。
このテスト ドメインは、.htaccess ファイルで次のルールを使用しています。

Options +FollowSymLinks
Options +Indexes
RewriteEngine on

 # deal with potential pre-rewrite spidered / bookmarked urls
RewriteRule ^clothes/index.php?pg=([0-9]+)$ /clothes/index$1.php [R=301,L] 

 # deal with actual urls
RewriteRule ^clothes/[0-9a-z-]+-pr([0-9]+).php$ /clothes/product.php?pid=$1 [L] 

2番目のルールは正常に機能します。 http://testdomain.dev/clothes/shirt-pr32.php と入力すると、http://testdomain.dev/clothes/product.php?pid=32 からのコンテンツが静かに配信されます ...これは期待どおりです!

ただし、これがライブ サイトに適用されたと仮定すると、元は http://testdomain.dev/clothes/product.php?pid=32 などのパスを使用していたサイトで、古い新しい URL へのパターン ...これが、第 1 のルールが意図していたことです

私の問題は、テスト サーバーが最初のルールを無視して、要求どおりにページを提供しているように見えることです (ページは読み込まれますが、アドレス バーは http://testdomain.dev/clothes/product.php?pid=32 のままです)。

どんな援助や啓蒙も、最も丁重に受け入れられます!

4

2 に答える 2

0

RewriteCond 内のクエリ文字列を照合し、ルールからその RewriteCond を逆参照する必要があります。RewriteRule は、クエリ文字列ではなく、パスに対してのみ一致します。

これは、以前に同様のリクエストで回答した関連記事です: Mod_rewrite rewrite example.com/page.php?v1=abc&v2=def to example.com/abc/def

于 2013-01-18T19:08:07.873 に答える
0

書き換えルールでクエリ文字列と照合することはできません。条件で `%{QUERY_STRING} 変数を使用し、%を使用してグループ化を後方参照する必要があります。したがって、代わりに:

RewriteRule ^clothes/index.php?pg=([0-9]+)$ /clothes/index$1.php [R=301,L] 

あなたは必要になるでしょう:

RewriteCond %{QUERY_STRING} ^pg=([0-9]+)
RewriteRule ^clothes/index.php$ /clothes/index%1.php? [R=301,L] 
于 2013-01-18T19:10:32.830 に答える