6

一部のサイト (古いhttp://careers.stackoverflow.com 1.0 を含む) には、次のようなクエリ文字列があることに気付きました。

http://somewebapp.example/?123

と比較して:

http://somewebapp.example/123またhttp://somewebapp.example/id/123

開発者が 2 番目と 3 番目の例ではなく、最初の例を使用して Web アプリの URL を実装することを選択する理由は何ですか?

おまけとして、最初の例を PHP で実装するにはどうすればよいでしょうか。それ123がデータベース テーブルのある行の主キーであるとします。(URL から取得する方法を知る必要があるだけです123。データベースに の主キーを照会する方法は既に知っています123。)

編集 [5/28]:おっと、後者の 2 つの URL が何であるか、それらがどのように機能し、どのように実装するかを知っていることをみんなに知らせるのを忘れていました。リマインダーをありがとう、とにかく偶然に明らかにされたいくつかの無関係な誤解があったと思います!

4

7 に答える 7

9

前者は実装が簡単です。? の後のすべて クエリ文字列の一部です。Web サーバーは ? の前に指定されたページをロードし、クエリ文字列を個別に処理します (PHP では からアクセスできます$_GET) 。

2 番目の例では、開発者はすべてのリクエストを特別なページにリダイレクトするように Web サーバーを設定する必要があります (/123サーバーにはページがないため)。

最後の質問に関しては、123will が$_GETキーとして表示されるためkey($_GET)、クエリ文字列で渡すのはそれだけであると想定して機能します

于 2010-05-28T17:08:43.323 に答える
1

を使用してphpからアクセスできます

$_SERVER['QUERY_STRING']
于 2010-05-28T17:10:54.463 に答える
1

最初の URL はクエリ パラメータを使用してデータを送信しています。REST後者は、実際にリソースを指している URLの形式です。ID 123

于 2010-05-28T17:11:03.757 に答える
0

最初の例はクエリ文字列です。2 番目と 3 番目の例はそうではありません。URL の詳細については、すべての開発者が URL について知っておくべきことを参照してください。クエリ文字列の ID を使用するには、適切なライブラリを使用して解析する必要があります。

于 2010-05-28T17:08:40.693 に答える
0

開発者が 2 番目と 3 番目の例ではなく、最初の例を使用して Web アプリの URL を実装することを選択する理由は何ですか?

美学。クールな URIについて読んで、 URIの設計方法に関する適切なアドバイスを得てください。

PHPで最初の例をどのように実装しますか

あなたは探しています$_SERVER['PATH_INFO']が、注意してください: 一部のホスティングプロバイダーは、そこに偽物を入れています.

そのような状況では、 mod_rewriteなどを使用する必要があります。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(\d+) /index.php?id=$1 [L,QSA]

そうすれば、IDを取得できます$_GET['id']

于 2010-05-28T17:09:28.533 に答える
0

これは、実際には modRewrite ルールまたは apache 構成に関係しています。Code Ignitor などの一部のフレームワークは、これらのルートを使用して、その物理的な場所に技術的に実際には存在しないページにユーザーを誘導します。これは解析され、フレームワークが表示に適したビューを決定します。一部のルールでは、フレームワークから有効なルートが利用可能かどうかを判断するために、Web サーバーが / の後にパラメーターとして何かを渡すことができます。一部のシステムはこれを自動的に行わないため、ルートとしてフレームワークに強制的に渡されるように疑問符が付けられます。

最初のインスタンスから 123 を取得したい場合は、リクエスト query_string をプルする必要があります

于 2010-05-28T17:10:20.940 に答える
0

Apache を使用している場合 (他のサーバーでも同じことができますが、詳細はわかりません)、これらの行に沿った何かが興味深いトリックを実行します。

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.+)$ index.php/$1
</IfModule>

ルール: 要求されたページがファイル!-fでもディレクトリでもない場合、エラー!-dを返す代わりに、要求されたパスを読み込んで、そのスクリプトに次の形式で渡します(.xml から抽出することもできます) 。page not foundindex.php$_SERVER['PATH_INFO']$_SERVER['REQUEST_URI']

または、Apache に に書き換えるように指示することもできます。index.php?$1この場合、パスは から抽出できます$_SERVER['QUERY_STRING']。(その場合、QSA引数を使用して、何も混乱させることなく現在のクエリ文字列 (存在する場合) を追加する必要があります。

于 2010-05-28T17:19:59.867 に答える