1

何年も使用している次の.haccessルールがありますが、web.configファイルで機能するように変換する必要があります。

誰かがどこから始めるべきか手がかりを持っていますか?

#Set the mapfiles for the category and product pages 
RewriteMap mapfile1 txt:maps/map_categories.txt 
RewriteMap mapfile2 txt:maps/map_products.txt 
RewriteMap lower int:tolower 

#FIX the trailing slash 
RewriteRule ^([^.?]+[^.?/])$ $1/ [R=301,L] 

#Define the rules for the CATEGORY pages 
RewriteCond %{URL} ^(?!/(cms|cms/.*)$)
RewriteCond %{URL} ^(?!/(vadmin|vadmin/.*)$)
RewriteCond %{URL} ^(?!/(bathroom-blog|bathroom-blog/.*)$) 
RewriteRule ^(?:[^/]+/)?([^/.]+)/?$ product_list.asp?catid=${mapfile1:${lower:$1}}&%{QUERY_STRING} [NC,L]

#Define the rules for the PRODUCT pages 
RewriteCond %{URL} ^(?!/(cms|cms/.*)$)
RewriteCond %{URL} ^(?!/(vadmin|vadmin/.*)$)
RewriteCond %{URL} ^(?!/(bathroom-blog|bathroom-blog/.*)$)  
#RewriteCond %{REQUEST_FILENAME}.asp -d 
#RewriteCond %{REQUEST_FILENAME}.asp -f
RewriteRule ^.+/.+/([^/.]+)/$ product_detail.asp?prodID=${mapfile2:${lower:$1}}&%{QUERY_STRING} [NC,L]

助けてくれてとても感謝しています!

乾杯、クリス。

4

2 に答える 2

2

web.config.NETファイルについてはよくわかりません。最後に使用したのは4年前です。したがって、.htaccessファイルの機能を順を追って説明することから始めます。私は、どのように行われたかではなく、何が行われたかに焦点を当てています^([^.?]+。つまり、のろい文句のように見える のような多くの表現については説明しません。

それは長い答えなので、コーヒーを飲みましょう。

最初の 3 行から始めましょう。

RewriteMap mapfile1 txt:maps/map_categories.txt 
RewriteMap mapfile2 txt:maps/map_products.txt 
RewriteMap lower int:tolower 

ファイルまたはホスト構成のRewriteEngine onどこかにありますか?.htaccess

RewriteMap次のように、以下のルールで使用できるマッピングを設定します${mapfile1:argument}map_categories.txtサブディレクトリにとmap_products.txtの2 つのファイルが必要ですmaps。あなたのアプリケーションがこれらのテキスト ファイルを更新すると想像できます。3 番目のマッピングは、大文字を小文字に変換します。



#FIX the trailing slash 
RewriteRule ^([^.?]+[^.?/])$ $1/ [R=301,L]

コメントは本当です。を持っているとしましょう。http://example.com/productこれは( ) にリダイレクトされます。HTTP 301 Moved Permanentlyhttp://example.com/product/



#Define the rules for the CATEGORY pages 
RewriteCond %{URL} ^(?!/(cms|cms/.*)$)
RewriteCond %{URL} ^(?!/(vadmin|vadmin/.*)$)
RewriteCond %{URL} ^(?!/(bathroom-blog|bathroom-blog/.*)$) 
RewriteRule ^(?:[^/]+/)?([^/.]+)/?$ product_list.asp?catid=${mapfile1:${lower:$1}}&%{QUERY_STRING} [NC,L]

http://example.com/cmshttp://example.com/cms/http://example.com/cms/any_path、およびの代わりにvadminまたはのような URL がある場合は、対応するカテゴリ ID を使用して呼び出します。これらのルールは、マッピングを使用して名前を ID にマップし、マッピングに小文字の名前しか含まれていない場合でも、大文字と小文字の混合を許可します。bathroom-blogcmsproduct_list.aspmap_categories.txt

概要:のカテゴリ ID を持つhttp://example.com/cms/some_category呼び出し。product_list.aspsome_category



#Define the rules for the PRODUCT pages 
RewriteCond %{URL} ^(?!/(cms|cms/.*)$)
RewriteCond %{URL} ^(?!/(vadmin|vadmin/.*)$)
RewriteCond %{URL} ^(?!/(bathroom-blog|bathroom-blog/.*)$)  
#RewriteCond %{REQUEST_FILENAME}.asp -d 
#RewriteCond %{REQUEST_FILENAME}.asp -f
RewriteRule ^.+/.+/([^/.]+)/$ product_detail.asp?prodID=${mapfile2:${lower:$1}}&%{QUERY_STRING} [NC,L]

これは本当に奇妙です。3 つのRewriteCond条件は、上記の最初の 3 つとまったく同じです。これが本当に機能する場合、前任者は URL 書き換えの黒魔術を使用しました。たとえば、(リダイレクトなしで) 書き換えが成功した後、ルールが再読み取りされ、現在書き換えられている URL に適用されます。これについてもっと調べるには、あなたのシステムにアクセスする必要があります。

すべてが表示されていないことはすでにわかっています:RewriteEngine onが欠落しており、マッピング ファイルもありません。



URL 書き換えは、実験をしないと正しく理解するのが難しいことで有名なテーマの 1 つです。ここ Stack Overflow ですぐに役立つヘルプを入手するのが難しいのも不思議ではありません。問題は、ほとんどの場合、関連するシステムにアクセスする必要があることです。ライブ システムを調査しないと答えを出すことができないためです。

Apache自体が次のように述べています:http://shib.ametsoc.org/manual/misc/rewriteguide.html#page-header

Apache モジュールmod_rewriteはキラーです。つまり、URL 操作を行うための強力な方法を提供する非常に洗練されたモジュールです。これを使えば、夢見ていたほぼすべての種類の URL 操作を実行できます。のmod_rewrite主な欠点は、初心者にとって理解しやすく、使いにくいことです。また、Apache の専門家でさえ、役立つ新しい側面を発見することがありmod_rewriteます。

言い換えれば、最初に自分の足を撃ち、二度とそれを使用しないか、その力のために残りの人生でそれを愛するかのmod_rewriteどちらかです.

強調は私です。

于 2012-10-26T09:18:25.600 に答える
0

1時間ほどグーグルで調べた後、IIS7がrewriteMaps関数を介してマップファイルをサポートしていることがわかりました。次の 2 つの Web ページは、必要なソリューションを提供してくれました。また、ID->URL マッピングを保存するために別の「rewritemaps.config」ファイルを作成しました。

http://www.iis.net/learn/extensions/url-rewrite-module/using-rewrite-maps-in-url-rewrite-module

http://blogs.iis.net/ruslany/archive/2010/05/19/storing-url-rewrite-mappings-in-a-separate-file.aspx

.htaccess マップファイルの構成を web.config に変換したい場合は、この 2 つのページを参照してください。

于 2012-10-31T11:09:17.777 に答える