ユーザー プロファイル システムの作成について助けが必要です。Facebook やMyspaceのように、アドレスの後にユーザー名だけがあり、疑問符などは何もないようなものにしたいと考えていますwww.mysite.com/username
。登録、ロギング スクリプトなどはすべて完了しましたが、上記の URL の例「/username」を使用してプロファイルにアクセスするにはどうすればよいですか?
3 に答える
最初のディレクトリを取り、それを $_GET パラメータとして渡す mod リライトを作成する必要があります。
これを試して:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*)/$ index.php?user=$1
「/」以降はすべて index.php?user=directory に書き換える必要があります。
誰かがtldrの瞬間に備えて、私の答えの要約版を次に示します。
- 「users」というディレクトリを作成します。
そのディレクトリ内で、次の mod_rewrite を使用して .htaccess ファイルを作成します。
REQUEST_URIRewriteEngine on
RewriteRule !\.(gif|jpg|png|css)$ /your_web_root/users/index.php'REQUEST_URI
これで、users ディレクトリに対して作成された、括弧内にない拡張機能に対するすべてのページ リクエストは、index.php に送られます。
index.php は、ユーザーが入力した URL を受け取り、最後にビットを取得します。これを行う方法はたくさんありますが、最後の部分が常にユーザー名であり、おそらく username/pics/ ではないことがわかっている場合の簡単な方法を次に示します。
$url_request = $_SERVER['REQUEST_URI']; //Returns path requested, like "/users/foo/"
$user_request = str_replace("/users/", "", $url_request); //this leaves only 'foo/'
$user_name = str_replace("/", "", $user_request); //this leaves 'foo'
次に、そのユーザー名の DB にクエリを実行します。存在する場合、index.php はプロファイルを出力しますが、スクリプトが /users/404.php にリダイレクトしない場合は、プロファイルを出力します。
しかし、ユーザーが存在する場合、訪問者に表示されるのは、入力したものだけです
www.example.org/users/foo/
そして彼らはfooのユーザーページにたどり着きました。
ハッカーが悪用する get 変数はなく、別のブログや名刺の URL に非常に簡単に配置できます。
実際、「?」を取り除くことは可能です。素敵でシンプルな www.example.org/users/someusername を持っています。
これについて知ったのは、 A List Apartの Till Quack の記事「 URL で成功する方法」です。
したがって、Apache、.htaccess、および mod_rewrite を理解する必要があります。この方法では、セキュリティ リスクを理解し、それらを説明する必要があります。基本的な考え方は次のとおりです。
「users」というディレクトリを作成し (必須ではありませんが、これにより全体が簡素化されます)、そのディレクトリに、「すべてのファイルまたはディレクトリ要求が特定の種類 (画像、PDF) ではないものは、このスクリプトに送信する必要があります。これにより、ユーザーの送信先が処理されます。" 記事の mod_rewrite は次のようになります。
RewriteEngine on
RewriteRule !\.(gif|jpg|png|css)$ /your_web_root/index.php
私の例では、「/your_web_root/users/index.php」になります。より単純な理由は、このスクリプトがページ上のすべてのリクエストを処理するのではなく、ユーザー ディレクトリ内のリクエストを処理するだけだからです。
次に、「オーケー、指定された URL は何ですか?」という php スクリプトがあります。基本的に、最後の末尾のスラッシュの後の部分 (または最後に別のスラッシュがある場合は 2 つ) を取得し、見つけたものをサニタイズし (これは非常に重要です)、「このユーザー名は私の DB に存在しますか?」と言います。はいの場合は、リクエスタをユーザーのプロファイルに送信しますが、きれいな URL を使用して (すぐに説明します)、そうでない場合は、「ユーザーが見つかりません」ページ、または必要なものに送信します。
そのため、ユーザーが見つかった場合、PHP スクリプトはユーザー プロファイルを出力します (繰り返しますが、必ずサニタイズしてください。機会があれば、悪意のあるコードを自分のプロファイルに埋め込むことができます。プロファイルを表示するブラウザーがそのコードを実行することを知っている)。リクエストされたページは次のとおりです。
www.example.org/users/example_user
また、リダイレクトの代わりに mod_rewrite を使用しているため、URL は同じままで、.htaccess ファイルがプルアップするスクリプトはユーザー プロファイルをダンプするだけです。訪問者には、上記の URL を入力しただけで、ユーザー プロファイルが表示されます。
また、単純に「user_not_found」ページを出力するのではなく、ユーザーが「user not found」ページにリダイレクトすることを確認する PHP スクリプトも必要です。これは、次のものを入れる人なら誰でもそうです:
www.example.org/users/blabhaboehbohe
URL が次のように変更されます。
www.example.org/users/notfound/
URLが同じままであるのを見る代わりに。ハッカーが URL が変更されていないことを確認した場合、mod_rewrite を使用していることがわかるため、実際の出力を処理するスクリプトが必要です。彼らがそれを知っていれば、あなたが開いたままにしておく可能性のあるすべてのセキュリティ ホールを探すのに夢中になる可能性があります。
乾杯。
書き換えエンジンを見てください。一部のフレームワークには、Zend Framework に使用できるZend_Routerがあるように、このジョブを実行するクラスもあります。これは単独で使用できます。他のフレームワークにもあります。ドキュメントで好みのフレーバーを確認してください。