質問

私は通常のもので始まるのhtaccessファイルを持っています:

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

は、その後、いくつかの書き換えなどを持っています

RewriteRule ^protect/?$ /Legal/Your-Financial-Protection.aspx   [NC, L, R=301]

その後、RewriteMap命令で終了します:

RewriteMap map txt:rewritemaps/map.txt  [NC]
RewriteRule ^(.+)$  ${map:$1}   [R=301]

RewriteMap命令は、当社のレガシーのURLのすべて含まれています - 新しいサイト上の同等のページにリダイレクトされます私たちの現在のサイトと短いURLのページ(約4Kがあるが、私は本当にマップを使用する必要があります):

Inspiration.aspx /Inspiration.aspx
Destinations/Africa/Countries/Gabon.aspx /Destinations/Africa/Gabon.aspx
indonesia /Destinations/Southeast-Asia/Indonesia.aspx

にリダイレクトRewriteMap命令は(たとえそれらが一致していない)、(つまり、コメントアウトされていない)すべての私のURLを有効にすると問題は、ある/ - 。スタイルシート、JS、画像などなど。

私は何をした後だと、マップ内のパターンに一致するURIは(つまりは同じまま)を通過し、交換し、他のすべてにリダイレクトすることです。

私は地図上の$ 1のデフォルトを設定しようとしました。

RewriteRule ^(.+)$  ${map:$1|$1}    [R=301]

が、これは単にリダイレクトループが発生します。私はまた、すべての.cssの書き換えをスキップできると思います、の.js、.jpgのなどではなく、使用されるファイル拡張子のリストを維持する必要はありません。

これは、Apacheごとにrewritemapsを処理するために主張し、我々は過去に問題を抱えていたことがありませんが、ちなみに、私は(私はIIS 6上だとして)HeliconTechからISAPIRewriteを使用しています。

すべてのヘルプは非常にいただければ幸いです!

おかげで、アダム

役に立ちましたか?

解決

ただ、実際には異なるマップで唯一のペアを置きます。そうしないとあなたは同じ値にリダイレクトし、無限再帰を取得します。

と一致するものが見つかったときにのみリダイレクトする、これを試してください:

RewriteCond ${map:$1} ^/.+
RewriteRule ^(.+)$ %0 [R=301]

他のヒント

この行は問題あります:

RewriteMap map txt:rewritemaps/map.txt  [NC]

あなたは.htaccessファイル内RewriteMap命令を定義することはできません。 あなたは、サーバーやバーチャルホストにマップを定義する必要がありますする(RewriteMap命令のドキュメントを参照してください)コンテキスト、そしてそれはあなたの.htaccessファイルで参照することができます。あなたは十分に高いログレベルを上げた場合、あなたはあなたのマップがロードされていない警告が表示されます。

ガンボのソリューションは、空白でURLのを扱うようには見えないことを除いて、素晴らしいです。 http://www.webmasterworld.com/apache/3830228.htm の洞察を提供していますスペースを処理する方法、 そのような2つが結合します:

  RewriteCond ${moved:${escape:$1}} ^/.+
  RewriteRule ^(.+)$ %0 [R=301]

は動作しません。くそー

mod_rewriteのを嫌います
  IPADDR - - [07/Jan/2010:01:44:58 --0500] [example.org/sid#842a5a8][rid#100e0a18/initial] (2) init rewrite engine with requested uri /press/Partners With City.pdf
  IPADDR - - [07/Jan/2010:01:44:58 --0500] [example.org/sid#842a5a8][rid#100e0a18/initial] (3) applying pattern '^(.+)$' to uri '/press/Partners With City.pdf'
  IPADDR - - [07/Jan/2010:01:44:58 --0500] [example.org/sid#842a5a8][rid#100e0a18/initial] (5) map lookup OK: map=escape key=/press/Partners With City.pdf -> val=/press/Partners%20With%20City.pdf
  IPADDR - - [07/Jan/2010:01:44:58 --0500] [example.org/sid#842a5a8][rid#100e0a18/initial] (6) cache lookup FAILED, forcing new map lookup
  IPADDR - - [07/Jan/2010:01:44:58 --0500] [example.org/sid#842a5a8][rid#100e0a18/initial] (5) map lookup FAILED: map=moved[txt] key=/press/Partners%20With%20City.pdf
  IPADDR - - [07/Jan/2010:01:44:58 --0500] [example.org/sid#842a5a8][rid#100e0a18/initial] (4) RewriteCond: input='' pattern='^/.+' => not-matched

アダムは、ガンボのルールは、キーに先頭のスラッシュを含んでいます そして、あなたのマップの掲示版は、それらが不足しています。

RewriteLogLevel 9は、このような事を暴くために非常に便利です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top