3

LAMP 構成でユーザーバニティ URL を作成する最良の方法は何ですか?

たとえば、ユーザー プロファイル ページには次のようにアクセスできます。

http://www.website.com/profile.php?id=1

ここで、ユーザーがプロファイルの「バニティ URL」を入力した場合、バニティ URL で上記のページをロードする必要があります。

たとえば、ユーザーがバニティ URL として「i.am.a.user」を選択し、データベース内のユーザー ID が 1 の場合、http: //www.website.com/profile.php?id=1にアクセスできます。その URL http://www.website.com/i.am.a.userによって。

.htaccess で mod が書き換えられていることは知っていますが、それがここでどのように機能するかはわかりません。

前述したように、私のサイトは PHP、MySQL、Linux、および Apache で構成されています。

ありがとう。

4

4 に答える 4

4

site.com/user/USERNAMEの書き換え:

ルートWebディレクトリに、.htaccessファイルを配置します。

RewriteEngine on
RewriteRule ^user/(.+)$ profile.php?name=$1 [L]

これにより、「user」で始まるすべてのリクエストがprofile.phpにルーティングされ、URIがに渡され$_GET['name']ます。この方法は、ファイル/ディレクトリ/その他の書き換えが多い場合に適しています。

site.com/USERNAMEの書き換え:

RewriteEngine on
# if directory or file exists, ignore
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)$ profile.php?name=$1 [L]

これは、要求しているファイルまたはディレクトリが存在しない場合、および要求URIが空でない場合(つまり、www.site.com)にのみprofile.phpにルーティングされます。

PHPバックエンド

これでprofile.phpに、次のようなものを含めることができます。

if (!empty($_GET['name'])
    $user = ... // get user by username
else 
    $user = ... // get user by id
于 2011-05-04T01:48:54.300 に答える
4

他のページに、確認できる特定の URL があるとします。次の情報が役立ちます。

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9-_]*)$ /profile.php?user=$1 [L]

これは、ユーザーのショートカット URL を許可しながら、現在の URL を維持するのに役立ちます。また、 はRewriteRuleを含まない URL のみに一致/するため、意図しないリダイレクトからの保護に役立ちます。そう、

/i-am-a-user -> MATCHES
/i_am_a_user -> MATCHES
/i-!am-a-user -> NOT MATCHED
/i.am.a.user  -> NOT MATCHED
/i.am.a.user/ -> NOT MATCHED
/some/page/ -> NOT MATCHED
/doesnotexist.php -> NOT MATCHED
/doesnotexist.html -> NOT MATCHED

それが役立つことを願っています。

編集

上記のルールを更新して、実際のファイル/ディレクトリがリダイレクトされないようにし.php.htmlファイルがどちらにも送信されないようにしましたprofile.php

于 2011-05-04T02:34:17.427 に答える
1

もちろん、apacheRewriteMapを使用してこれを解決することもできます。RewriteMapは、プレーンテキストファイル(ユーザーが入力した内容に基づいて定期的に更新する)にすることも、スクリプト(Perl、PHPなど)を指定して書き換えを行うこともできます。

PHPを使用してこれを設定する方法の概要については、MySQLデータベースを使用してPHPを介してmod_rewriteを制御するを参照してください。

于 2011-05-04T07:05:13.470 に答える
1

最初に .htaccess ファイルをセットアップして、存在しないファイルとディレクトリに対するすべてのリクエストを単一の php ファイルに送信します。

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) router.php [NC,L]

次に、router.php 内で、$_SERVER['REQUEST_URI'] を調べてユーザー名を取得します。これをクエリで使用して、ユーザーに関するデータを取得します。

これは、ユーザー プロファイル ページではないすべての URL がサーバー上に物理ファイルとして存在することを前提としています。

そうでない場合は、router.php でいくつかのロジックを実行して、各リクエストで何を行うかを決定できます。PHP で URL ルーティングを Google 検索すると、多くの例が表示されます。

于 2011-05-04T05:56:10.887 に答える