2

私はRewriteMapこのように見えるものを持っています:

Guide           1
Mini-Guide      2
White Paper     3

そして私はそれをApacheviaに含めています

RewriteMap legacy txt:/var/www/site/var/rewrite_map.txt

この位置にRewriteRuleあると言われる左側の値のみを許可するを作成したいと思います。RewriteMap

RewriteRule ^/section/downloads/(${legacy})/(.*)$ /blah.php?subsection=${legacy:%1}&title=$2

${legacy}右側で使用できることはわかっていますが、左側で使用できますか?その場合、どのように使用しますか?

4

3 に答える 3

7

マップファイルでは、左側がキーで、右側が値です。マップと照合するためのルールを作成するときに、キーを入力すると、値が出力されます。

RewriteRuleを次のように変更します。

# Put these on one line
RewriteRule ^/section/downloads/([a-zA-Z-]+)/(.*)$
            /blah.php?subsection=${legacy:$1}&title=$2

最初のグループ化は、着信URLの文字列をキャプチャします。置換の$1は、名前付きマップに適用されます。デフォルト値を作成するには、に変更${legacy:$1}${legacy:$1|Unknown}ます。

最後に、マップファイルにある値に対してのみルールを機能させる場合は、:を追加しますRewriteCond

RewriteCond ${legacy:$1|Unknown} !Unknown
# Put these on one line
RewriteRule ^/section/downloads/([a-zA-Z-]+)/(.*)$
            /blah.php?subsection=${legacy:$1}&title=$2

条件は、マップがデフォルト値()を返さない場合はUnknown、次のルールを実行することを示しています。それ以外の場合は、ルールをスキップして次に進みます。

Apache RewriteMap

于 2009-12-15T18:36:12.720 に答える
2

別のバリアント:

# %1 will be the subpattern number1 afterwards
RewriteCond %{REQUEST_URI} ^/section/downloads/(.*)
# check if there is no mapping for %1
RewriteCond ${legacy:%1} !^$
# if there is rewrite it
RewriteRule ^/(.*) /blah.php?subsection=${legacy:%1}&title=$2 [R]
于 2013-03-16T10:02:34.190 に答える
1

マップで見つかった値のみを許可したいとおっしゃいました。キャプチャグループの正規表現で追加の制限を指定しない限り、これは不可能です。マップ自体でそれを行う方法はありません。私の知る限り、左側のパターンに適用できる「map.keys」構文はありません。

ただし、
キャプチャされた値が見つからない場合は、デフォルト値を指定できます。こちらです:

## all on one line
RewriteRule ^/section/downloads/([a-zA-Z-]+)/(.*)$
        /blah.php?subsection=${legacy:$1|defaultValue}&title=$2

「defaultValue」を好きなものに置き換えてください。たとえば、指定された引数がマップで見つからない場合は、0(ゼロ)または「notfound」です。

次に、その結​​果を別のルールで書き直すか、単にフロースルーを許可して、デフォルト値のURLで「404」メッセージを提供することができます。

別のルールを使用することを選択した場合、次のようになります。

## all on one line
RewriteRule ^/section/downloads/([a-zA-Z-]+)/(.*)$
        /blah.php?subsection=${legacy:$1|notFoundMarker}&title=$2

## This rule fires if the lookupKey was not found in the map in the prior rule.
RewriteRule ^/blah.php?subsection=notFoundMarker  /404.php   [L]
于 2009-12-15T18:45:22.550 に答える