1

わかりました、私はmod_rewriteで驚くべきことではありません。私は良くしようとしていますが、時々読むのが少し難しいです。

とにかく、私はクライアントのテストサイトをセットアップし、現在のライブサイトに移動しようとしています。私はmod_rewriteを読んでいますが、理解しやすいソースを見つけるのは困難です。

彼らはかなり広範な.htaccessファイルを持っています。

例えば:

RewriteCond %{HTTP_HOST} ^clientdomain\.com
RewriteCond %{HTTPS} =on
RewriteRule .* https://www.%{SERVER_NAME}%{REQUEST_URI} [R,L]

私がこれを読む方法は-

ドメインがclientdomain.comで始まる場合は、HTTPSが有効になっているサーバーにリダイレクトします-正しく読み取っていますか?

次はこれです:

RewriteCond %{HTTP_HOST} ^(.*)clientdomain2.COM [NC]
RewriteRule ^(.*)$ clientdomain/template.php?pid=49 [R,L]

私が知る限り、これは、ドメインがclientdomain2.comの場合、clientdomainに移動し、pid = 49のGET引数を指定してtemplate.phpページに移動することを示しています-正しいですか?

最後に、これが何を意味するのか、私にはまったくおかしな手がかりがありません。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/index.php
RewriteCond %{REQUEST_URI} (/|\.php|\.html|\.htm|/[^.]*)$  [NC]
RewriteRule ^(.*)(/|\.php|\.html|\.htm)*$ index.php?phpinc=$1 [QSA]
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]

最初の部分は、すべての.php、.htm、および.htmlを削除しているようです-正しいですか?

これに関するアドバイス、またはmod_rewriteの扱いを理解しやすいソースは大歓迎です

4

1 に答える 1

1

ドメインが clientdomain.com で始まる場合、HTTPS が有効になっているサーバーにリダイレクトします。

ほとんど、それは読むべきです:

「ドメインがで始まり、リクエストがclientdomain.com HTTPSリクエストである場合、302 はServerNameディレクティブ (おそらく vhost 構成内) によって定義されたサーバーにリダイレクトしますが、そのwww.前に同じリクエストと HTTPS を使用します。」

私が知る限り、これは、ドメインが clientdomain2.com の場合、clientdomain に直接移動し、pid=49 の GET 引数で template.php ページに移動することを示しています - 正しいですか?

clientdomain2.COMいいえ、これは大文字と小文字を区別しない (フラグ) を含むものをチェックしNC、302 はそれを同じホストとプロトコル、および URI にリダイレクトします/clientdomain/template.php?pid=49。プロトコルとホスト名 (例: ) が含まれていないためhttp://clientdomain2.com/、URI のみが変更され、要求が行われたのと同じホストとプロトコルにリダイレクトされます。例: リクエストは でhttp://www.clientdomain2.com/something/foo、リダイレクトは に行われhttp://www.clientdomain2.com/clientdomain/template.php?pid=49ます。

最初の部分で .php、.htm、および .html がすべて取り除かれているように見えます - 正しいですか?

これは「ルーティング」タイプのルールです。これらのルールは通常、リダイレクト ルールの後にあります。これは一種のキャッチオールであるためです。それは言っています:

  1. リクエストは既存のファイルに対するものではありません
  2. リクエストは既存のディレクトリに対するものではありません
  3. 要求された URI は次で始まっていません/index.php
  4. 要求された URI は、次のいずれかの拡張子 (大文字と小文字を区別しない、フラグNC)phpで終わります: この条件は、スクリプト、画像、CSS スタイルなどにルールが適用されないようにするためのようです。htmlhtm//[^.]*
  5. 条件 1 ~ 4 が満たされている場合は、拡張子が存在する場合は拡張子なしで、要求された URI の値 (拡張子なし) で/index.php指定されたクエリ文字列パラメーターを使用して、要求を内部的に書き換えます。phpinc既存のクエリ文字列パラメーターは末尾に追加されます (QSAフラグ)。

最後のルールは、環境変数HTTP_AUTHORIZATIONAuthorizationヘッダーにあるものに設定することです。$_SERVERこれは、php スクリプトの変数を介して取得されます。

于 2012-12-26T20:56:53.413 に答える