-1

このメソッドがどのように呼び出されるかさえわかりません。達成したい動作を知っているだけです。

この例はFacebookです。プロフィールページにアクセスfacebook.com/[username or id]すると、ルートフォルダーにディレクトリが作成され、すべてのユーザーのインデックスファイルがそこに配置されているとは想像できません。

では、次の動作はどのように達成されますか。あなたは行きsomepage.com/foo/bar/hello​​ますが、実際にあなたは要求していますsomepage.com/foo?bar=helloか?

これはApacheとPHPでも可能ですか?

4

2 に答える 2

2

このメソッドがどのように呼び出されるかさえわかりません。達成したい動作を知っているだけです。

これはURI/URLと呼ばれ、そのローカル部分がWebサーバーに渡されます。次に、Webサーバーがリクエストを処理します。

これはApacheとPHPでも可能ですか?

はい。でもない。これがWebサーバーの目的です。サーバーで発生することは、Webサーバー上の具体的なプロセスまたはファイルと一致する必要があるかどうかおよびどのように一致する必要があるかを規制しないURI/URL仕様のみを知っているHTTPプロトコルによって完全に保護されます。

たとえば、Apache HTTPサーバーには、URL書き換えを行うMod_Rewriteと呼ばれる有名なモジュールがあります。多くの場合、ブラウザを使用しているユーザーが気付かないような方法で。

PHPファイル(Apache HTTPD)を使用した構成例:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ app.php [QSA,L]
</IfModule>

$_SERVER['REQUEST_URI']PHPスクリプトでは、やなど$_SERVER['QUERY_STRING']の特殊な変数を使用してURI/URLを取得できます。

于 2012-10-27T18:29:25.613 に答える
1

通常、これはmodrewriteで作成されます。そこで、スクリプトの変数への「パス」を作成できます。

たとえば、http://example.com/user/1/editは、modrewriteを使用してhttp://example.com/index.php?function=edit&userid=1に変換できます

このようなルールは次のようになります。

RewriteEngine on
RewriteRule ^/user/([0-9]+)/([a-z]+)$ index.php=function=$2&userid=$1 [L]

最初の行はリライトモジュールをアクティブにしました。2番目の行には正規表現があり、URLを内部でリライトするために一致する必要があります。必要に応じて、の修飾子instadを使用して外部で作成することもできます。[R][L]

詳細については、ドキュメント全体をご覧ください。

brecketsにあるものはいわゆるフラグであり、これも十分に文書化されています。

お役に立てば幸いです。

于 2012-10-27T18:19:38.437 に答える