0

URL 書き換えがどのように機能するかを理解しようとしています。次のリンクがあります。

mysite.com/profile.php?id=23

上記の URL をユーザーの姓名で書き換えたいと思います。

mysite.com/directory/liam-gallagher

私が読んだことから、URLを出力するルールを指定しますが、テーブルにクエリを実行して各ユーザー名を取得するにはどうすればよいですか?

これが理解しにくい場合は申し訳ありません、私は自分自身を混乱させました!

4

3 に答える 3

6

あなたはこれを間違った方向から見ています。そのような自動 URL 書き換えはできません。最善の方法は、全体的な URL の書き換えを作成することです。

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</IfModule>

URLとして使用されるユーザーの特定の名前をデータベースに作成します。

+---------+----------+------+-----------+----------------+
| user_id | username | name | surname   | url            |
+---------+----------+------+-----------+----------------+
|      23 | liam     | Liam | Gallagher | liam-gallagher |
+---------+----------+------+-----------+----------------+

これで、誰かがあなたの にアクセスしたときにhttp://mysite.com/directory/liam-gallagher、最後のエントリを読み取ってデータベース内の を見つけuser_id、残りをスクリプトに任せることができます。

他の方法は、ペッカが提案したとおりです。のような URL を作成http://mysite.com/directory/23/liam-gallagherし、リンクから ID を読み取ります。しかし、私は個人的にそのような URL は好きではありません。私の意見では、それらは単に高速/怠惰な回避策です。

于 2012-10-19T10:51:10.643 に答える
0

次のようなもの(単なるドラフト、自分のニーズに合わせて...):

RewriteEngine On
RewriteRule ^([a-zA-Z]+)/([a-zA-Z]+)/([0-9]+)/([-0-9a-zA-Z]+)/?$ /$1/$2.php?id=$3 [L]
于 2012-10-19T10:49:56.500 に答える
0

私が使用した1つのアプローチは次のように機能します。

書き換えルールを作成します。

mysite.com/directory/(.*)

次の場所にリダイレクトされます。

mysite.com/profile.php?user=%1

ルールからキャプチャされたパラメータとして %1 を持っています。

次に、プロファイル ページのクエリ パラメータからユーザーを取得し、データベースからそのユーザーの ID を取得します。

http://httpd.apache.org/docs/current/mod/mod_rewrite.html

于 2012-10-19T10:50:20.953 に答える