質問

私は持っています RewriteMap それは次のように見えます:

Guide           1
Mini-Guide      2
White Paper     3

そして、私はそれを含めています Apache 経由

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

作成したい RewriteRule これにより、上記の左側からの値のみが許可されます RewriteMap この位置にいること。

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

私は使えることを知っています ${legacy} 右側では、左側に使用できますか?

役に立ちましたか?

解決

マップファイルでは、左側がキーであり、右側は値です。マップと一致するルールを作成すると、キーを入力すると値が出力されます。

あなたの書き直しをこれに変更してください:

# 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

他のヒント

別のバリアント:

# %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]

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

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

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

「DefaultValue」を好きなものに置き換えます。たとえば、0(ゼロ)、または「ゼロ」、または「ゼロ」、与えられたargがマップで見つからない場合。

その後、その結果を別のルールで書き換えるか、それが流れるようにして、デフォルトの値で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]
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top