2

私のファイル(red.map)で、いくつかの古いURLを新しいURLにマップするためにテキストファイルでApache RewriteMapを使用しています

/old-awful-url.html   /new-lovely-shiny-url.html

それから私のApache設定で私は持っています:-

RewriteEngine On
RewriteMap      migration       txt:/home/red.map
RewriteCond     ${migration:$1} /.+
RewriteRule     ^(/.*)  ${migration:$1} [L,R=301]

これは正常に機能しますが、条件にワイルドカードを追加して、末尾が同じ/cgi-bin/scriptnameで前にある古い URL にも一致させたいと考えています。たとえば、一致させたい/cgi-bin/scriptname/old-awful-url.html

RewriteCond に変更してみました:-

RewriteCond     ^.*${migration:$1} /.+

これは、ファイル内の URL の前にあるものと一致すると考えて、cgi 部分の有無にかかわらず、いくつかの組み合わせを試しましたが、成功しませんでした。これは可能ですか?

4

1 に答える 1

1

ディレクティブ自体/cgi-bin/scriptnameでオプションのパターンとして設定する必要があります。RewriteRuleそして、RewriteCondディレクティブはここでは完全に不要です。

RewriteEngine On
RewriteMap migration txt:/home/red.map

RewriteRule ^(?:/cgi-bin/scriptname)?(/.*) ${migration:$1} [L,R=301]

ただし、書き換えられた URL にその/cgi-bin/scriptname部分を再度含めたい場合、これは失敗します。そのためには、ルールを 2 つ (またはそれ以上?) に分割する必要があります。

RewriteEngine On
RewriteMap migration txt:/home/red.map

RewriteCond ${migration:$1} .
RewriteRule ^(/.*) ${migration:$1} [L,R=301]

RewriteCond ${migration:$2} .
RewriteRule ^/(cgi-bin/scriptname)(/.*) /$1${migration:$2} [L,R=301]
于 2016-09-22T20:02:44.993 に答える