73

通常、いくつかのプロフィールページを表示する慣行または非常に古い方法は次のようなものです:

www.domain.com/profile.php?u=12345

u=12345ユーザー ID はどこにありますか。

ここ数年、私は次のような非常に素晴らしい URL を持つ Web サイトを見つけました。

www.domain.com/profile/12345

PHPでこれを行うにはどうすればよいですか?

勝手な推測ですが、.htaccessファイルと関係があるのでしょうか? .htaccessファイルの書き方に関するヒントやサンプル コードを教えてください。

4

8 に答える 8

52

この記事によると、次のようなmod_rewrite (.htaccessファイルに配置) ルールが必要です。

RewriteEngine on
RewriteRule ^/news/([0-9]+)\.html /news.php?news_id=$1

そして、これはリクエストをマップします

/news.php?news_id=63

/news/63.html

別の可能性は でそれを行うことですforcetype。これにより、特定のパスにあるものはすべて php を使用してコンテンツを評価するようになります。したがって、.htaccessファイルに次のように記述します。

<Files news>
    ForceType application/x-httpd-php
</Files>

$_SERVER['PATH_INFO']次に、index.php は変数に基づいてアクションを実行できます。

<?php
    echo $_SERVER['PATH_INFO'];
    // outputs '/63.html'
?>
于 2009-05-01T18:26:07.833 に答える
31

私は最近、私のニーズに適したアプリケーションで以下を使用しました。

.htaccess

<IfModule mod_rewrite.c>
# enable rewrite engine
RewriteEngine On

# if requested url does not exist pass it as path info to index.php
RewriteRule ^$ index.php?/ [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php?/$1 [QSA,L]
</IfModule>

index.php

foreach (explode ("/", $_SERVER['REQUEST_URI']) as $part)
{
    // Figure out what you want to do with the URL parts.
}
于 2009-05-01T18:31:04.403 に答える
10

これを行う簡単な方法。このコードを試してください。htaccessファイルにコードを挿入します。

Options +FollowSymLinks

RewriteEngine on

RewriteRule profile/(.*)/ profile.php?u=$1

RewriteRule profile/(.*) profile.php?u=$1   

このタイプのきれいな URL が作成されます。

http://www.domain.com/profile/12345/

htaccess Pretty URL の詳細: http://www.webconfs.com/url-rewriting-tool.php

于 2016-04-18T11:42:39.283 に答える
4

これは実際には PHP ではなく、mod_rewrite を使用した Apache です。その人が www.example.com/profile/12345 というリンクを要求すると、apache は書き換えルールを使用してそれを切り刻み、www.example.com/profile.php?u=12345 のように表示します。サーバ。詳細はこちら:書き換えガイド

于 2009-05-01T18:26:50.467 に答える
-1

これを行うにはさまざまな方法があります。1つの方法は、前述のRewriteRule手法を使用して、クエリ文字列値をマスクすることです。

私が本当に気に入っている方法の1つは、フロントコントローラーパターンを使用する場合、http://yoursite.com/index.php/path/to/your/page/hereのようなURLを使用して、$_SERVERの値を解析することもできます。 ['REQUEST_URI']。

次のコードを使用して、/ path / to / your / page/hereビットを簡単に抽出できます。

$route = substr($_SERVER['REQUEST_URI'], strlen($_SERVER['SCRIPT_NAME']));

そこから、好きなように解析できますが、ピートのために、必ずサニタイズしてください;)

于 2009-05-01T19:55:47.133 に答える
-1

ModRewrite だけが答えではありません。.htaccess で Options +MultiViews を使用$_SERVER REQUEST_URIして、URL にあるすべてのものを確認することもできます。

于 2009-05-01T18:32:32.637 に答える
-2

RESTful Web サービスについて話しているようです。

http://en.wikipedia.org/wiki/Representational_State_Transfer

.htaccess ファイルは 1 つのコントローラーを指すようにすべての URI を書き換えますが、この時点で取得したいよりも詳細です。あなたはリセスを見たいかもしれません

これは、すべて PHP で記述された RESTful フレームワークです。

于 2009-05-01T18:28:47.717 に答える