私はこの問題を解決しようとしてここ数日から髪を抜いてきました:
URLをフォーマットから変換したい
http://example.com/prodsearch/category/tag1-tag2-tag3-tag4
に
http://example.com/prodsearch/index.php?tag=tag1+tag2+tag3+tag4&cat=category
まず、.htaccessに次のルールを追加しました
RewriteRule ^prodsearch/(.*)/(.*)-(.*)$ prodsearch/$1/$2+$3 [L]
RewriteCond %{REQUEST_URI} !^prodsearch/(.*?)/(.*)\-(.*)
RewriteRule ^prodsearch/(.*)/(.*)$ index.php?tag=$2&cat=$1 [R,QSA,L]
ここで、rule1はタグ間のすべての「-」を再帰的に「+」に置き換え、rule2はタグ間に「-」がなくなると実際の書き換えを行います(RewriteCondによってチェックされます)
これらのルールは実際には機能しますが、問題は、(URLを変更して)新しいURLパターンにリダイレクトすることです。明示的なリダイレクトは必要ありません。最後のルールから「R」フラグを削除すると、すべてが機能しなくなり、WordPressのインストールで404ページが表示され始めます。
誰かがこれが起こっている理由と明示的なリダイレクトなしでこれを行う方法を説明できますか?
また、これらのルールをワードプレスに含めてみました。ワードプレスのルールによって呼び出されたときに、リダイレクトなしで機能することを期待しています。次のadd_rewrite_rule()呼び出しを使用しました:
add_rewrite_rule('prodsearch/(.*)/(.*)-(.*)$','price-list/$1/$2+$3','top');
add_rewrite_rule('prodsearch/(.*)/(.*)$','index.php?tag=$matches[2]&cat=$matches[1]','top');
これで、wordpressは最初のルールを外部ルールとして検出し、それを.htaccessファイルにフラッシュします。これにより、実行順序がねじ込まれ、最初のルール2が最初に評価され(内部のwordpress書き換えルールセットの一部である)、ルール1が後で実行されるため、再び404ページ。
私の最初のルールを外部ルールと見なさず、.htaccessにフラッシュしないようにwordpressに指示することは可能ですか?
それとも、この種の書き換えを機能させるアイデアを誰かが持っていますか?どうもありがとう。