2010-12-15 6 views

答えて

3

このような何か:

RewriteCond %{REQUEST_FILENAME} !profile.php 
RewriteRule ^(.*)$ /profile.php?user=$1 [L] 

userhttp://www.example.com/profile.php

という名前のGET変数だからこのように、これは、ドメイン名の後に何を渡します:

http://www.example.com/User123 

になります:

http://www.example.com/profile.php?user=User123 

これは静かに行われるため、サーバーにはURLが醜いprofile.phpが表示されますが、ブラウザには「pretty」example.com/User123バージョンが表示されます。


あなたは何が起こっているのより徹底的な説明を求めたので、ここにある:

RewriteRuleはビットif文のようなものです。基本的には、「要求がこのパターンと一致する場合は、要求をこの別のファイルにリダイレクトします」と言っています。

我々はに対して一致しているパターンは次のようにブレークダウンし ^(.*)$ある

  • ^

    は、任意の数の試合を「文字列の先頭に一致する
  • .*手段を探し始める」という意味任意の文字(.)の(*は)
  • $「文字列の末尾にマッチする停止を意味します。

あなたが一緒にこれらを組み合わせると、それは基本的にのぼる「すべての要求に一致する。」

.*周りの括弧は、彼らが変数で囲む規則の一部と一致したものを保存するためのmod_rewriteを伝えます。変数が格納される変数は$1となります(複数の括弧がある場合は$2$3などに格納されます)。

この$1変数は、RewriteRuleの最後の部分で指定された新しいパスを定義するために使用されます。

RewriteCondは、別のifステートメントをRewriteRuleの周りに投げるようなものです。 "この条件が真であれば、以下のRewriteRuleを実行するだけです。「あなたのケースでのRewriteCondは、ファイルがURL(%{REQUEST_FILENAME})で要求されている場合は、ルールを実行するだけに言う

ではありません 『profile.php』

これの意味するところは、そのための要求です」 profile.phpは通常どおり処理されますが、他のリクエストはprofile.phpを指すようにリダイレクトされます

最後の[L]は、「この後にRewriteRulesを実行しない」という意味です。 "Last"。

泥でクリア?

+0

助けてくれてありがとう、でもこれは私にスクリプトの名前を与えるだけで、 ([user] => profile.php) しかし、私はあなたが上記のhttp://www.example.com/User123と同じURLにしたいと思っています。 – Neelesh

+0

@Neelesh:それは '[user] => profileのみを与えるべきです。 'example.com/profile.php'に移動した場合はphpです。 'example.com/User123'に行くと' [user] => User123'となります。 – AgentConundrum

+0

私は同じものを使用していましたhttp:// localhost:81/test/neeleshのように、 このコードは私にprofile.phpを与えていますArray([user] => profile.php) In profile.php <? print_r($ _ GET); ?> – Neelesh

-1
RewriteEngine On 
RewriteRule http://www.example.com/(.*) profile.php?u=$1 
+0

申し訳ありませんが、これは動作していません.... 助けてくれてありがとう... – Neelesh

関連する問題