0

私は一人一人が彼の個人的なプロフィールを持っているウェブサイトを持っています。mywebsite / user1mywebsite / user2のような静的URLが欲しいのですが、実際には同じページにとどまり、コンテンツを動的に変更します。その理由は、サイトを開くときにデータベースにデータを要求し、ページを変更するたびに要求したくないためです。mywebsiteのようなURLは好きではありませんか?user = 1

解決策はありますか?

ありがとうございました

[より良い説明を編集]

Webサイトのユーザープロファイルを表示する動的なページがあります。したがって、URLはhttp://mywebsite.me?user=2のようなものです が、http://mywebsite.me/user2nameのような静的リンクが必要です

なぜこれが欲しいのですか?覚えやすく、書きやすく、データベースに毎回データを要求することなく、ページのコンテンツを動的に変更できるため(すべてのページで共有情報が必要です。情報はすべてのページで同じです)

4

4 に答える 4

3

はい、あなたの問題に対する解決策があります!

最初の解決策はサーバー依存です。これがIISサーバーでどのように機能するかは少しわかりませんが、Apacheでは非常に単純です。Apacheは、 .htaccessというファイルからディレクティブを取得できます。.htaccessファイルが機能するには、アクティブなスクリプトと同じフォルダーにある必要があります。また、メインサーバー構成にロードされたディレクティブAllowOverride Allとモジュールも必要です。mod_rewriteこれらすべてを設定した場合は、.htaccessファイルを編集して次のものを含める必要があります

RewriteEngine on
RewriteRule ^mywebsite/([^/\.]+)/?$ index.php?user=$1 [L]

mywebsite/index.php?user=12これにより、でアクセスできるようになりますmywebsite/12mod_rewriteの初心者ガイド。

PHPだけでこれを偽造することもできます。前の例ほどきれいではありませんが、実行可能です。また、データが汚染されていると見なされるように、ユーザー入力を使用していることを考慮してください。ユーザーは、を介してスクリプトにアクセスする必要がありますmywebsite/index.php/user/12

<?php
    $request = $_SERVER['REQUEST_URI'];
    $request = explode($request, '/'); // $request[0] will contain the name of the .php file
    $user[$request[1]] = $request[2];

    /* Do stuff with $user['user'] */
?>

これらは、あなたが望むものを達成するために私が知っている最も速い方法です。

于 2012-11-16T17:01:35.687 に答える
1

まず、ここで紹介したソリューションをよく理解してください:http: //codeumbra.eu/how-to-make-a-blazing-fast-ajax-call-to-a-zend-framework-application

これはあなたが提案したことを正確に実行します:すべての不要なデータベースクエリを排除し、現在必要なものだけを実行します(あなたの場合:ユーザーデータをフェッチします)。アプリケーションがZendFrameworkを使用しない場合でも、原則は同じです。アプリケーションで必要な方法でデータベース接続を開く必要があります。または、PDOまたは使い慣れたものを使用してください。

基本的に、このメソッドは、必要なデータをフェッチするためにサイトにAJAX呼び出しを行うことを前提としています。jQueryでは簡単です(上記の記事で提供されている例)。成功した場合は、JavaScriptを使用して前のユーザーのデータを要求されたデータに置き換えることもできます(AJAXに精通していることを願っています。そうでない場合は、コメントを残してください。詳細を説明します)。

[編集]

編集でURIの書き換えを説明したので、単純なURIルーターの実装を提案できます。それがどのように機能するかの背後にある基本はここで説明されています:http://mingos.eu/2012/09/the-basics-of-uri-routing。アプリケーションで必要なだけルーターを複雑または単純にすることができます。

于 2012-11-16T16:53:47.490 に答える
0

URLは、データベース呼び出しを行うかどうかを指示しません。これらは2つの別々の問題です。通常、サーバーをセットアップするため、内部example.com/usernameでに書き換えられexample.com/user.php?id=usernameます。あなたはまだPHPを実行しています、URLはそれをマスクしているだけです。これはプリティURLと呼ばれ、 URLの書き換えによって実現されます。

データベースの呼び出しを避けたい場合は、データをキャッシュしてください。たとえば、上記のuser.phpスクリプトでは、完全なHTMLページを生成し、それをどこかのキャッシュフォルダーに書き込みます。次に、ページを再度生成する代わりに、スクリプトは既に作成されたページのコンテンツを出力します。または、データベースデータをどこかにキャッシュしても、毎回HTMLを新たに生成します。

実際のHTMLファイルをに書き込むことができる/usernameので、WebサーバーはPHPを気にすることなく直接それを提供します。ただし、これらのファイルを更新/期限切れにするのは困難であり、動的コンテンツも必要になるため、これ通常は必要ありません

于 2012-11-16T17:05:13.500 に答える
0

データベースからすべてを選択します。

次に、それぞれのスクリプトの内容(index.php?user ='s)を含むファイルを作成します。ファイル名をSELECTステートメントから取得したuser_id/user_nameに設定します。

これにより、現在のフォルダに各ユーザーのページが作成されます。

「静的」ページを再作成する必要をなくすために、「indexedyet」という名前の新しい列を設定し、ファイルの作成時に1に変更することができます。これが0であるファイルのみを選択します。これは、cronjobを介して1日1回程度実行できます。

ただし、自動的に更新されないため、ユーザーデータの変更に対して脆弱なままになります。ここで使用する戦術は、編集時に静的ページを更新することです。

もう1つの、おそらくより良い(申し訳ありませんが、まだ十分なコーヒーがありませんでした-)理想は、ユーザー登録でフォルダーを作成することです。登録時にindex.phpページをそれらに合わせて作成すると、www.mysite.com/myuserのようなものに「調整されたバージョン」が表示されます。ユーザーの更新時にページを再度更新します。

あなたのアプローチに応じて例を提供させていただきます。

于 2012-11-16T17:12:02.120 に答える