2011-06-21 22 views
11

ウェブサーバーはどのようにURL書き換えメカニズムを実装し、ブラウザのアドレスバーを変更しますか?
私は、apache、nginx、lighthttpdなどの設定に特定の情報を求めていません!
サーバがURLを書き換えたいときに、どのような情報がクライアントに送信されるのか知りたいですか?URL書き換えはどのように機能しますか?

+0

RFC 2616のセクション10.3を参照してください。http://www.ietf.org/rfc/rfc2616.txt –

答えて

4

あなたは(ApacheのMOD-書き換えのように)、サーバー側の書き換えについて話していますか?そのため、アドレスバーは一般に変更されません(リダイレクトが実行されない限り)。 またはリダイレクトについて話していますか?これらは、サーバーにHTTPコード(301,302または307)とHTTPヘッダー内の場所で応答させることによって行われます。

+0

私はサーバー側のルールについて話していました。ありがとう! – cirne100

1

ジェフアトウッドは、このことについての素晴らしい記事を持っていた:http://www.codinghorror.com/blog/2007/02/url-rewriting-to-prevent-duplicate-urls.html

ウェブサーバがURL書き換えメカニズムを実装し、ブラウザのアドレスバーを変更する方法は?

URLの書き換えと転送は、2つの完全に異なるものです。 サーバーはブラウザを制御できないため、ブラウザのURLを変更することはできませんが、ブラウザに別のURLに移動するよう依頼することができます。あなたのブラウザがサーバから応答を受け取ったとき、ブラウザはその応答に何をするかを決めることができます。それはリダイレクトに従うか、無視するか、サーバが諦めるまでサーバを迷惑にします。サーバーがアドレスを変更するために使用する「メカニズム」はありません。特定のリソースが別の場所に移動されたときにサーバーが従うプロトコル(HTTP 1.1)、つまり3xx応答です。

+0

-1どのように動作するかを記述したポストのどこにも私は見ませんでした。 – Davy8

+0

@ Davy8、私は私の質問を編集し、私の上司が私の事務所に電話したときにその情報をすべて追加していたのです...)...今は遅すぎます。 – Kiril

2

URLの書き換えは、サーバー側で純粋にURLを変換することができます。これにより、Webアプリケーション開発者は複数のURLからWebリソースにアクセスできるようになります。

たとえば、ユーザはhttp://www.example.com/product/123を要求することがありますが、書き換えのおかげで実際にはhttp://www.example.com/product?id=123のリソースが提供されます。ブラウザに表示されるアドレスを変更する必要はありません。所望であれば

アドレスを変更することができます。このために、上記と同様のマッピングがサーバー上で行われますが、リソースをクライアントに戻すのではなく、サーバーは書き換えられたURLのリダイレクト(301または302 HTTPコード)をクライアントに返します。以下のように見えるかもしれません。この上記の例

クライアント要求

GET /product/123 HTTP/1.1 
Host: www.example.com 

この時点で、サーバーの応答

HTTP/1.1 302 Found 
Location: http://www.example.com/product?id=123 

、ブラウザがURLのための新しいGET要求を発行します。 Locationヘッダーにあります。サーバ内で純粋に行われたものとリダイレクトされているもの:

2

は、「URLリライト」の2つの形式があります。それはサーバ内で純粋になら

、それは内部の問題だと唯一のサーバーに実装さディスパッチメカニズムに関して重要。 Apache HTTPDでは、例えばmod_rewriteがこれを行うことができます。

リダイレクトの場合、リダイレクトを意味するステータスコードが、ブラウザでリダイレクトされるURL(絶対URL)を示すLocationヘッダーとともにレスポンスに送信されます。 mod_rewriteもこれを行うことができ、[R]フラグが付いています。 ステータスコードは通常302 (found)ですが、他のコード(たとえば301または307)に設定することもできます。

もう1つの非常に一般的な使用方法(通常はApache HTTPDでデフォルトでオンになっているので気づかないことが多い)は、ディレクトリの末尾にスラッシュを付けたURLへのリダイレクトです。これはmod_dirによって実装されます。

Aサーバは の要求を受信したときにリダイレクトが に発行された「最後のスラッシュ」URLのdirnameがディレクトリであるhttp://servername/foo/dirname 。 ディレクトリの末尾にスラッシュ( )が必要です。したがって、mod_dirは http://servername/foo/dirname/にリダイレクトします。

29

動作には2種類あります。

1つは書き換えられ、もう1つはリダイレクトされます。

書き換え

サーバがhttp://example.org/my/beatuful/pageのようなURLをリライトしてhttp://example.org/index.php?page=my-beautiful-page

として理解することが作る、自分自身のための置換を行い、クライアントには何も表示されません。また、リダイレクトは内部です。ブラウザーにURLは変更されず、サーバーだけが別の方法でそれを理解します。

リダイレクト

サーバーは、サーバーによってアドレスが望ましくないことを検出します。 http://example.org/page1http://example.org/page2に移動したので、HTTP 3xxコードでブラウザに新しいページの内容を伝えます。クライアントは代わりにこのページを要求します。したがって、ブラウザのアドレスが変わります!

プロセス

プロセスは同じままであり、同様にこの図によって説明される:

enter image description here

備考すべてリライト/リダイレクト例外IIRCと書き換え規則に新しいコールを(トリガ)

​​

は、ループを停止するのに役立ちます。 (それは一度起こったときに書き換えをしないので)。

+0

あなたは 'RewriteCond%{REDIRECT_URL}を説明できますか?^ RewriteRule。* - [L]'もう少し – vipin8169

+0

内部リダイレクトが発生したとき、Apacheはこのリダイレクト変数を作成します。新しいリダイレクトを処理する前に空であるかどうかを確認できます。 –

+0

ここでは書き換えフラグについて説明します[リンク](http://httpd.apache.org/docs/2.2/rewrite/flags.html) – Athiruban

関連する問題