1

私はApache Rewritesにかなり慣れていないので、これはおそらく簡単な質問です(直接の答えを見つけるのはそれほど簡単ではありません).

だから私は次のリライトを持っています:

RewriteCond %{QUERY_STRING} ^parm=([a-z]+)$ [NC]
RewriteRule ^path/to/some_script.php /simple-url-$1.html? [R=301,L]

テストでは期待どおりに機能しているように見えます:

www.mydomain.com/path/to/some/script.php?parm=foo

正しく 301 から:

www.mydomain.com/simple-url-foo.html

ただし、スクリプトを明示的に定義する RewriteCond がない場合、some_script.php に対するものであるかどうかに関係なく、すべてのリクエストでこの条件がチェックされ、Apache に不要な負荷がかかることが懸念されます。

これは事実ですか?もしそうなら、この場合に REQUEST_URI を使用する方法を理解するのに問題があります.IE:

RewriteCond %{REQUEST_URI} ^path/to/some_script.php [NC]
RewriteCond %{QUERY_STRING} ^parm=([a-z]+)$ [NC]
RewriteRule ^path/to/some_script.php /simple-url-$1.html? [R=301,L]

上記は機能していないようで、その理由はわかりません。ポインタはありますか?

4

1 に答える 1

2

短い答え、%{REQUEST_URI}条件は不要です。

条件を追加することで、リクエスト URI の比較がクエリ文字列の前に行われるように移動するだけです。それは、来るすべての要求と比較されます。some_script.php実際、 の比較が 2 回行われるため、状況はさらに悪化します。で 1 回、 でもうRewriteCond1 回RewriteRule

また、元の設定では、すべてのリクエスト URI がチェックされているわけではありませんsome_script.php。また、クエリ パラメータを使用%{QUERY_SRING}したリクエストに対してのみ比較が行われるようにします。parm

于 2013-08-23T01:49:34.607 に答える