web-dev-qa-db-ja.com

マルチサイト:.htaccessを使用してプロダクションイメージを使用してローカルに開発する

私はマルチサイトのWordPressインストール( - https://codex.wordpress.org/Create_A_Network を参照)で作業していますが、自分のローカル環境でサイトをテストするためにすべてのリモートプロダクションイメージをダウンロードする必要はありません。

次の.htaccessを書き換える例では、ライブのWordPressサイトから直接画像を取得することができます。

RewriteCond %{REQUEST_URI} ^/wp-content/uploads/[^\/]*/.*$
RewriteRule ^(.*)$ http://example.com/$1 [QSA,L]

- https://css-tricks.com/develop-locally-use-images-production/ を参照してください。これは通常のスタンドアロンWordPressのインストールについての説明です。

Multisiteインストール、つまり異なるドメイン上の複数のWordPressブログに対応するようにこれを調整することはできますか?

私は特定のローカルサブドメインへのリクエストをマッピングするために次のことを試みましたが、成功しませんでした。

RewriteCond %{HTTP_Host} ^local\.example\.com/wp-content/uploads/[^\/]*/.*$
RewriteRule ^(.*)$ http://www.example.com/$1 [QSA,L]
1
benedict_w

以下の.htaccessは、例を書き直すために...

RewriteCond %{REQUEST_URI} ^/wp-content/uploads/[^\/]*/.*$
RewriteRule ^(.*)$ http://example.com/$1 [QSA,L]

念のために...これは 外部リダイレクト R=302RewriteRuleディレクティブに含まれているかのように)になります。(Rフラグがなくても)(単に推奨されるような)書き換えではありません。そのため、ブラウザはuploadsディレクトリ内のすべてのリソースに対して2つのリクエストを発行します。これはローカルのテスト環境で(あなたが行っているように)開発している間は大丈夫かもしれませんが、外部リソースがたくさんあると文字通りあなたのサイトを停止させる可能性があるので本番では決してしないでしょう。 (これを正しく行うには、あなたのサーバをリバースプロキシとして設定し、mod_proxyを使ってリクエストを「プロキシ」する必要があります。)

RewriteRule 置換 に絶対URL(つまりscheme + hostnameを使用)を指定した場合、Apacheは暗黙的に外部リダイレクトを起動します。


上記を特定のドメイン(例:local.example.com)をターゲットにするには、Hostヘッダーをチェックする追加の条件を追加するだけです。例えば:

RewriteCond %{HTTP_Host} ^local\.example\.com
RewriteCond %{REQUEST_URI} ^/wp-content/uploads/[^/]+/
RewriteRule (.*) http://example.com/$1 [R,QSA,L]

上記についてのいくつかの注意:

  • (.*)^(.*)$と同じです - アンカーは不要です。
  • 同様に、.*$(これは単にURLの末尾の なんでも に一致します)は不要です。
  • [^/][^\/]と同じです。
  • パスセグメント内の1つ以上の文字に一致し、0以上の文字には一致しません。すなわち。 [^/]+の代わりに[^/]*
  • Rを追加しました。実際に何が起こっているのかを明確にするためです。

しかし、実際にはREQUEST_URIと一致する2番目のRewriteCondは必要ありません。 RewriteRule pattern が最初に処理されるので、これをRewriteRule pattern に移動する方が効率的です。たとえば、上記のように書き換えることができます。

RewriteCond %{HTTP_Host} ^local\.example\.com
RewriteRule ^wp-content/uploads/[^/]+/ http://example.com%{REQUEST_URI} [R,QSA,L]
3
MrWhite