ホームページ >バックエンド開発 >PHPチュートリアル >[転送] ドメイン名をサブディレクトリにバインド_PHP チュートリアル
仮想ホストにフォーラムやブログをインストールする場合、管理を容易にするために、ルート ディレクトリ (www/web ディレクトリ) の下のフォルダーにインストールします。たとえば、Discuz フォーラムをインストールする場合は、次のようにします。ルート ディレクトリにインストールします。そのディレクトリの下に新しい bbs ディレクトリを作成し、インストールが完了すると、フォーラムにアクセスするアドレスが http://www になります。 .example.com/bbs (http://www.example.com/bbs/forum.php) ですが、結局のところ、私たちのドメイン名は http://www.example.com です。 bbs サブディレクトリを追加する代わりに、このドメイン名を通じてフォーラムに直接アクセスしたいだけなので、この種の問題を解決するためにこの URL 転送レコードが機能します。これはこの記事の主題ではありません。ここでは、URL 転送テクノロジを使用してドメイン名をサブディレクトリに転送する方法についてのみ説明します。 Baidu のどこにでもあります。実装方法についてお話しましょう。
(1) 新しい .htaccess テキスト ファイルをローカルに作成します。.htaccess はこのテキスト ファイルの名前であるため、テキスト ファイルの完全な名前は .htaccess.txt になります。
(2) テキストファイルに次のコードを記述します:リーリー (3) テキスト ファイルから拡張子 .txt を削除し、ftp アップロード ツールを使用して Web サイトのルート ディレクトリ (www/web ディレクトリ) にアップロードします。これは Web サイトのルート ディレクトリである必要があることに注意してください。 SEO 最適化設定で URL 静的化を行う場合にもこのファイルを記述する必要がありますが、.htaccess ファイルは bbs ディレクトリに配置する必要があります。
これで、http://www.example.com にアクセスする限りフォーラムにアクセスできるようになります
注: (.htaccess ファイルの説明)
[RewriteEngine On] は、リライト エンジンがオンまたはオフであることを意味します。この機能は、ステートメントを 1 つずつコメントする必要がないように、次のステートメントを便利にオンまたはオフにすることです。
[RewriteCond %{HTTP_HOST} ^(www.)?
example.com$ [NC]] は書き換え条件を表し、前の %{HTTP_HOST} はプレフィックス部分のみを参照します。 www.example です。com には「http://」と「/」は含まれません。^ は文字列の先頭を意味し、$ は文字列の末尾を意味します。エスケープしなくても問題ありません。一部のサーバーがサポートしていないことを防ぐために、エスケープすることをお勧めします。 ? は、前にある括弧 www. が 0 回または 1 回出現することを意味します。次のステートメントが一致しない場合はスキップしてください。また、全員が入力した URL が小文字であるという保証はありません。URL が大文字で入力された場合、Linux システムでは大文字と小文字が区別されるため、大文字と小文字を区別しないように RewriteCond の後に [NC] を追加する必要があります。
[RewriteCond %{REQUEST_URI} !^/bbs/] も書き換え条件です。%{REQUEST_URI} はアクセスの相対アドレスを表します。これは、ドメイン名 / の後のコンポーネントであるルート ディレクトリからの相対アドレスです。形式には最初の「/」が含まれており、! は非を意味します。このステートメントは、アクセスされたアドレスが /bbs/ で始まらず、^ でのみ始まり、$で終わらないことを意味します。
【RewriteCond %{REQUEST_FILENAME} !-f】【RewriteCond %{REQUEST_FILENAME} !-d】
これら 2 つのステートメントの意味は、要求されたファイルまたはパスが存在しない場合は、既存のファイルが存在することを意味します。またはパスが返されます
1] は書き換えルールを表します。最も重要な部分は、上記の RewriteCond 条件が満たされた場合にこの書き換えルールが実行されることを意味します。^(.* )$ は正規表現一致。現在要求されている URL と一致します。 ^(.*)$ は現在の URL の任意の文字と一致することを意味します。 . は任意の 1 文字を意味します。 * は 0 回または N 回 (N>0) と一致することを意味します。次の /bbs/$1は書き換えコンポーネントであり、以前に一致した文字を /bbs/$1 に書き換えることを意味します。この $1 は逆一致を表し、最初のかっこのコンポーネント、つまり $ の ^(.*) .* を参照します。
—————————————————————————————————————————————————— ———————————————————————————————以下に簡単な文法規則とフラグを添付します:
[RewriteCond 構文:]
RewriteCond TestString CondPattern [flags]
rewritecond のその他の使用法:
‘-d’ (ディレクトリ)
TestString をパス名として扱い、それが既存のディレクトリであるかどうかをテストします。
‘-f’ (通常ファイル)
TestString をパス名として扱い、それが既存の通常ファイルであるかどうかをテストします。
‘-s’ (空ではない通常ファイル)
TestString をパス名として扱い、それがサイズが 0 より大きい既存の通常ファイルであるかどうかをテストします。
‘-l’ (シンボリック リンク)
TestString をパス名として扱い、それが既存のシンボリック リンクであるかどうかをテストします。
‘-x’ (実行可能)
TestString をパス名として扱い、それが実行可能権限を持つ既存のファイルであるかどうかをテストします。この権限はオペレーティング システムによって検出されます。
‘-F’ (サブリクエストに存在するファイルの場合)
TestString が有効なファイルであり、サーバーの現在のアクセス制御設定でアクセスできるかどうかを確認します。内部サブリクエストを使用してチェックを実行すると、サーバーのパフォーマンスが低下するため、注意して使用してください。
‘-U’ (サブリクエストに存在する URL)
TestString が有効な URL であり、サーバーの現在のアクセス制御設定でアクセスできるかどうかを確認します。内部サブリクエストを使用してチェックを実行すると、サーバーのパフォーマンスが低下するため、注意して使用してください。
【RewriteRule構文:】
RewriteRuleパターン置換[フラグ]
【フラグ】:
‘chain|C’(次のルールをリンク)
このタグは、現在のルールを次のルールにリンクします。これには、ルールが一致すると、後続のルールが処理され続けるという効果があります。つまり、このマークは、ルールが一致しない場合、後続のルールはスキップされます。たとえば、ディレクトリ レベルのルールで外部リダイレクトを実行する場合、「.www」を削除する必要がある場合があります (「.www」はここでは表示されません)。
‘cookie|CO=NAME:VAL:domain[:lifetime[:path]]’ (cookieの設定)
クライアント側でcookieを設定します。 Cookie の名前は NAME で、値は VAL です。 Domain は Cookie のドメイン (「.apache.org」など)、オプションの Lifetime は Cookie の有効期間 (分)、オプションの path は Cookie のパスです。
‘env|E=VAR:VAL’ (環境変数の設定)
このタグは、環境変数 VAR の値を VAL に設定します。VAL には、拡張可能な正規表現後方参照 ($N および %N) を含めることができます。このタグを複数回使用して、複数の変数を設定できます。これらの変数は、後続の多くの状況で間接的に参照できます。通常は XSSI () または CGI ($ENV{'VAR'}) だけでなく、 RewriteCond ディレクティブは %{ENV:VAR} 経由で参照されます。これを使用して、URL から削除された情報を記憶します。
‘forbidden|F’ (禁止された URL)
現在の URL を強制的に禁止します。つまり、HTTP 応答コード 403 (禁止) を直ちにフィードバックします。このタグを使用すると、複数の RewriteCond をチェーンして、特定の URL を条件付きでブロックできます。
「gone|G」 (URL の強制放棄)
現在の URL を強制的に放棄します。つまり、HTTP 応答コード 410 (廃止) を直ちにフィードバックします。このタグは、ページが放棄され、存在しないことを示すために使用します。
‘handler|H=Content-handler’ (必須のコンテンツ ハンドラー仕様)
ターゲット ファイルのカスタム コンテンツ ハンドラーを強制的に Content-handler にします。たとえば、ScriptAlias ディレクティブは、mod_alias モジュールをエミュレートして、マップされたフォルダー内のすべてのファイルを「cgi-script」プロセッサーによって強制的に処理するために使用されます。
‘last|L’ (終了ルール)
は書き換え操作を直ちに停止し、他の書き換えルールは適用されません。 Perlの最後のコマンドやC言語のbreakコマンドに相当します。このタグは、現在書き換えられている URL が後続のルールによって再び書き換えられるのを防ぐために使用されます。たとえば、これを使用してルート パスの URL (「/」) を実際の URL (例: 「/e/www/」) に書き換えることができます。
‘next|N’ (やり直し)
書き換え操作を再実行します(最初のルールからやり直し)。このとき、再度処理される URL は元の URL ではなく、最後の書き換えルールによって処理された URL になります。 Perl の next コマンドや C 言語の continue コマンドに相当します。このマークにより、再書き込み操作を再開できます (ループの最初にすぐに戻ります)。ただし、無限ループにならないように注意してください。
'nocase|NC' (大文字と小文字を区別しない)
これは、パターンに大文字と小文字を無視させます。つまり、パターンが現在の URL と一致する場合、「A-Z」と「a-z」の間に違いはありません。
‘noescape|NE’ (出力内の URI をエスケープしない)
このフラグは、mod_rewrite が通常の URI エスケープ ルールを書き換え結果に適用するのを防ぎます。 通常の状況では、特殊文字 ('%'、'$'、';' など) は同等の 16 進エンコーディング ('%25'、'%24'、'%3B' など) にエスケープされます。このフラグは、このようなエスケープを防止して、パーセント記号などの記号を出力に表示できるようにします。例:
RewriteRule /foo/(.*) /bar?arg=P1%3d$1 [R,NE]
can make ' / foo/zed は安全なリクエスト「/bar?arg=P1=zed」にリダイレクトします。
‘nosubreq|NS’ (内部サブリクエストを処理しない)
現在のリクエストが内部サブリクエストの場合、このフラグは書き換えエンジンに書き換えルールを強制的にスキップさせます。たとえば、mod_include がディレクトリのデフォルト ファイル (index.xxx) を検索しようとすると、Apache は内部でサブリクエストを生成します。ルールの書き換えは必ずしもサブリクエストに役立つわけではなく、ルールセット全体が有効な場合はエラーがスローされる場合もあります。したがって、このタグを使用して特定のルールを除外できます。
使用原則: CGI スクリプトによる処理を強制するために URL に CGI スクリプト接頭辞を追加したが、サブリクエスト処理のエラー率 (またはリソースのオーバーヘッド) が高い場合は、このタグを使用できます。
‘proxy|P’ (プロキシへの強制)
このフラグにより、置換コンポーネントがプロキシ リクエストとして内部的に強制的に送信され、書き換え処理が直ちに中断され、処理が mod_proxy モジュールに引き渡されます。この置換文字列が mod_proxy で処理できる有効な URI (http://hostname で始まるなど) であることを確認する必要があります。そうしないと、プロキシ モジュールからエラーが返されます。このタグを使用すると、特定のリモート コンポーネントをローカル サーバーのドメイン名前空間にマッピングできるため、ProxyPass ディレクティブの機能が強化されます。
注: この機能を使用するには、mod_proxy モジュールを有効にする必要があります。
'passthrough|PT' (次のプロセッサにハンドオーバー)
このタグは、書き換えエンジンに内部 request_rec 構造体の uri フィールドを filename フィールドの値に設定するように強制します。この小さな変更により、RewriteRule の出力が可能になります。ディレクティブは、Alias、ScriptAlias、Redirect、およびその他のディレクティブになります (原文: このフラグは、Alias、ScriptAlias、Redirect、およびその他のディレクティブを使用して、RewriteRule ディレクティブの出力の後処理を有効にするための単なるハックです)。 -ファイル名トランスレータ。]。その意味を説明するために例を示します: /abc を /def に書き換えてから、mod_alias を使用して /def を /ghi に変換する場合は、次のようにすることができます:
RewriteRule ^/abc(.*) /def$1 [PT ]
Alias /def /ghi
PT タグが省略されている場合、uri=/abc/… を filename=/def/… に書き換える部分は正常に動作しますが、URI を alias に変換しようとすると後続の mod_alias が発生します。ファイル名が無効です。
注: URI をファイル名に変換する複数のモジュールを混在させる必要がある場合は、このタグを使用する必要があります。 。ここでの mod_alias と mod_rewrite の混合は典型的な例です。
‘qsappend|QSA’ (クエリ文字列の追加)
このタグは、既存の置換文字列を単純に置き換えるのではなく、クエリ文字列を書き換えエンジンに強制的に追加させます。書き換えルールを通じてリクエスト文字列に情報を追加する必要がある場合は、このタグを使用できます。
'redirect|R [=code]' (強制リダイレクト)
置換が http://thishost[:thisport]/ で始まる場合 (新しい URL を URI にする)、外部リダイレクトを強制できます。コードが指定されていない場合、HTTP 応答コード 302 (Temporary Move) が生成されます。 300 ~ 400 の範囲の別の応答コードを使用する必要がある場合は、ここで指定するだけです (または、次のシンボリック名のいずれかを使用します: temp (デフォルト)、permanent、seeother)。これを使用して、「/~」を「/u/」に書き換えたり、/u/user に常にスラッシュを追加したりするなど、正規化された URL をクライアントにフィードバックします。
注: このタグを使用する場合は、置換フィールドが有効な URL であることを確認する必要があります。そうしないと、無効な場所を指すことになります。また、このタグ自体は URL の先頭に http://thishost[:thisport]/ を付けるだけで、書き換え操作は続行されることに注意してください。多くの場合、書き換え操作を停止してすぐにリダイレクトする必要があるため、「L」タグも使用する必要があります。
’skip|S=num’ (後続のルールをスキップ)
このフラグは、書き換えエンジンに現在の一致ルールの後の num 個のルールを強制的にスキップさせます。 if-then-else 構造をシミュレートできます。最後のルールは then 節であり、skip=N ルールは else 節です。注: これは、「chain|C」タグとは異なります。
‘type|T=MIME-type’ (強制 MIME タイプ)
ターゲット ファイルの MIME タイプを MIME タイプに強制します。これは、特定の条件に基づいてコンテンツ タイプを強制するために使用できます。たとえば、次のコマンドは、.phps 拡張子を付けて呼び出した場合に、PHP ソース コード (application/x-httpd-php-source) の MIME タイプに従って mod_php によって .php ファイルを表示させることができます:
RewriteRule ^(. +.php )s$ $1 [T=application/x-httpd-php-source]