Apache - 動的サブフォルダ

Apache - 動的サブフォルダ

YouTubeでフォルダを動的にする方法は?たとえば、次のようにルートディレクトリのユーザーチャネルにアクセスできます。

http://youtube.com/PewDiePie

各チャンネルの新しいフォルダを作成することは明らかに彼らのアプローチではなく、次のリンクもあります。

http://youtube.com/PewDiePie/about

これはhtaccess、Apacheを使用して行われますか、それともPHPを使用して行われますか? StackOverflowに連絡する必要がありますか?

答え1

これをURL書き換えと呼びます。 Apache設定で直接RewriteEngineを使用するか、.htaccessを使用してApacheでこれを実行できます(実際に違いはありません)。他の多くのWebサーバーでこれを行うことができます(私はパフォーマンスと設定が簡単なのでnginxが好きです)。

URLを書き換えるとき、URLの動的部分(例では、/後ろと2番目の/前のすべての項目が動的部分の1つ)を一部のサーバーサイド言語に渡される変数に割り当てます。 PHPを使用してもJSPを使用しても構いません)。その後、サーバーサイド言語ではこれは一般的なGETパラメータであり、これを操作できます。データベースから関連データを読み込むなどの操作を行うことができます。

たとえば、次のように書き直します。

^(.*)/(.*)$ /controller.php?user=$1&page=$2

その後、PHPでは、コードは次のようになります。

echo $_GET['user'];

以下を印刷します。

PewDiePie

答え2

これはシステムの物理的な物理ディレクトリではありません。これは、物理ディレクトリにマップしたり、関数またはアプリケーションのパラメータとして解釈して操作したりできるURL名前空間の動的名前です。

このような「魔法」を促進するのはURLの書き換えです。本当に気になる場合は、スクラップマガジンの次のチュートリアルを見てください。URL書き換えの紹介

はい

あなたがウィキペディアだと想像してみてください。ウェブサイト全体は主にPHPに基づいているため、実際のURLは次のとおりです。

http://en.wikipedia.org/w/index.php?title=Barack_obama

ちなみにホームページにアクセスすると下記のページをご覧いただけます。

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

これを達成するためのApacheの設定:

RewriteEngine On
#Look for the word "wiki" followed by a slash, and then the article title
RewriteRule   ^wiki/(.+)$   w/index.php?title=$1   [L]

これにはブラウザがアクセスするURLが必要です。」http://en.wikipedia.org/wiki/Barack_obama「そして、Webサーバー(Apache)内で再構築してください。」http://en.wikipedia.org/w/index.php?title=Barack_obama」。

私はしばしばこれがスタートレックの万能翻訳機に似ていると思います。サーバーは入力時にブラウザーから一連のURLを取得し、バックエンドはこれらのURLをサーバーまたは他のサーバー上の実際のアプリケーションとスクリプトにマップされた別のURLに変換します。

答え3

なしですべてをリダイレクトするには、/単純なAliasMatchを使用して次のことを達成できます。モジュールエイリアス):

AliasMatch ^/([^/]+) /path/to/handler.php

REQUEST_URIその後、スクリプトで環境変数を確認して、表示するユーザーを処理できます。

/aboutその後、処理などの追加作業があります。

AliasMatch ^/([^/]+)/(about|videos|blah) /path/to/handler.php

/x/y/zまたは、上記のユーザー部分([^/]+スラッシュではなく1つ以上の文字)と一致するように、2つのレベルのみを一致させることもできます(同様のパスは処理されません)。

AliasMatch ^/([^/]+)/([^/]+) /path/to/handler.php

REQUEST_URI表示する内容を決定するには、もう一度使用してください。

これにより、ページURLは「現状のまま」提供されますが(ブラウザのアドレスバーのURLは変わりません)、コンテンツは/path/to/handler.php

これは2つの別々のルールです。/usernameandを1つのルールとして扱う方法があるかもしれませんが、/username/something最終的には読みにくいかもしれません。その後のすべての項目と一致することを避けるために、この方法で行われますdomain.com

スクリプトのパラメータへのパスを変更する必要がある場合は、次の場所にありますRewriteRuleモードの書き換え)。アドレスバーにURLを保持するには、リバースプロキシクエリを実行する必要があります。

 RewriteEngine On
 RewriteRule ^/([^/]+) /path/to/handler.php?user=$1 [LP]
 RewriteRule ^/([^/]+)/(about|videos|blah) /path/to/handler.php?user=$1&args=$2 [LP]

これにより、スクリプト処理時間が節約され、REQUEST_URIPHPから変数を抽出できます。$_GET['user']$GET['args']

同様に、AliasMatch2番目のルールは次のとおりです。

 RewriteRule ^/([^/]+)/([^/]+) /path/to/handler.php?user=$1&args=$2 [LP]

ただし、スクリプトは、両方のURLに一致するすべてのエントリに対して何をすべきかを知る必要があります。次のURLはあなたが望むものではないかもしれません。

 /errors/404.html
 /about/google.html

など。

関連情報