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 Permanently
http://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/cms
、http://example.com/cms/
、http://example.com/cms/any_path
、およびの代わりにvadmin
またはのような URL がある場合は、対応するカテゴリ ID を使用して呼び出します。これらのルールは、マッピングを使用して名前を ID にマップし、マッピングに小文字の名前しか含まれていない場合でも、大文字と小文字の混合を許可します。bathroom-blog
cms
product_list.asp
map_categories.txt
概要:のカテゴリ ID を持つhttp://example.com/cms/some_category
呼び出し。product_list.asp
some_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
どちらかです.
強調は私です。