1

私はURlを持っています

http://website.com/view/b2c32b2c782f65be2c299f7b38189a120fd51c89/

これは、ユーザーをプロファイル、つまりユーザーに関連する ID に誘導します。

とにかくphp/.htacess/mysqlを使用して、このIDを相対ユーザー名に置き換えていますか?

解決の形はありますか?

URL の id が get 値として解釈されるように、書き換えルールを使用します。

RewriteRule ^view/([a-f0-9]{40})/$ ./view/index.php?profile_id=$1
4

4 に答える 4

2

RewriteMapを使用して問題を解決することを検討する必要があると思います。

次のシナリオを考えてみてください: エンドユーザーのリクエストview/joe-soap/. RewriteMap はサーバーにこのユーザーの ID を要求し、実際/view/b2c32b2c782f65be2c299f7b38189a120fd51c89/には応答に基づいて を要求します。

これを機能させるには、(RewriteMap によって提供される) URL からユーザーの名前を受け取り、そのユーザーの ID を返す PHP スクリプトを作成する必要があります。RewriteMap を使用すると、サイレントに をリクエストできますview/index.php?profile_id=<retrieved_use_id_here>

Apache の Web サイトで提供されているドキュメントを一読することをお勧めします。他にも役立つサイトを次に示します。

  1. Apache で Rewritemap を理解する
  2. RewriteMap を使用した mod_rewrite: 外部書き換えプログラム
  3. Apache Mod_Rewrite に PHP を使用した例による RewriteMap PRG

ただし、これにより追加のリクエストが追加されることを考慮して、PHPを使用してIDを取得し、同じリクエスト内でそこから続行することをお勧めします(他の人が提案したように)。

于 2013-05-16T06:29:59.417 に答える
0

次のような元の URL が与えられた場合:

http://website.com/view/b2c32b2c782f65be2c299f7b38189a120fd51c89/

代わりに、次のようなものにリンクできます。

http://website.com/view/b2c32b2c78/your-username/

そして、次のような RewriteRule を使用します。

RewriteRule ^view/([a-f0-9]{10})/(.*)$ ./view/index.php?profile_id=$1

これにより、ID 自体に干渉することなく、URL の ID 部分の背後に何かを置くことができます。

次に、id の最初の 10 文字だけでも、mysql クエリを使用して適切なユーザーを選択できます。

SELECT * FROM users WHERE LEFT(user_id,10)='" . mysql_real_escape_string($_GET['profile_id']) . "' LIMIT 0, 1;

私はこの方法を、3000 から 4000 を超えるエントリを持つサイトの 1 つで使用していますが、ここで使用した 10 文字の代わりに8文字を使用しただけでまだ衝突が発生しておらず、衝突の種類もまだ見たことがありません。

于 2013-05-15T22:49:28.653 に答える
0

プロファイル URI を生成するコードを変更し、それにユーザー名を追加する必要があります。したがって、最終結果はこれらのいずれかになります。

http://website.com/view/your-username/b2c32b2c782f65be2c299f7b38189a120fd51c89/ http://website.com/view/your-username/

誰かが URI をクリックするたびにデータベースにクエリを実行する必要がないようにするには、これが唯一の方法だと思います。私に手伝ってもらいたい場合は、プロファイル URI を生成するコードを共有する必要があります。

于 2013-05-15T22:05:12.107 に答える