0

.htaccess には、次のようなさまざまな書き換えルールがあります。

RewriteEngine On

RewriteRule ^view-([_a-zA-Z]+)-([_a-zA-Z]+)$  /controllers/index.php?action=$1|$2

一部のリライト ルールに対してミラー リライト条件を作成する必要があります。これにより、長い URL から短い URL への 301 リダイレクトが実行されます。例えば

RewriteRule ^controllers/index\.php\?action=([_a-zA-Z]+)\|([_a-zA-Z]+)$  /view-$1-$2 [R=301]

しかし、何らかの理由でこのルールは機能しません。理由を理解していただけますか?

ありがとうございました。

更新: さまざまなエスケープ シーケンスを試しましたが、どれもうまくいかないようです。

4

1 に答える 1

0

私たちは解決策を見つけました。

まず第一に、mod_rewriteがどのように機能するかをよく理解していませんでした-RewriteRuleはクエリ文字列を解析できません。そのためには、クエリ文字列を解析する書き換え条件を追加してから、解析されたクエリ文字列を使用する書き換えルールを追加する必要があります。

したがって、私たちの状況を解決するには、次のものが必要です。

RewriteCond %{QUERY_STRING}    ^action=([_a-zA-Z]+)\|([_a-zA-Z]+)$
RewriteRule ^controllers/index\.php$    /view-%1-%2?    [R=301,L]

RewriteCondによって解析されるパラメーターは、$ではなく%を介して参照されることに注意してください。また、クエリ文字列の結果ルールへの受け渡しをバイパスするために、?を使用していることに注意してください。ターゲットパスの最後にあります。

残っているのは循環リダイレクトを取り除くことだけですが、それは別の話です。

于 2013-01-17T11:05:29.990 に答える