2

ある時点でCDNに使用する予定のサブドメインがありますimages.example.com。そのサブドメインのリクエストは次のようになりますhttp://images.example.com/path/to/some/image.jpg。ただし、現在、すべてが同じサーバーでホストされており、サーバーはのimages.example.comエイリアスとして持つように構成されていますexample.com

このようにして、両方のリクエストが機能します。 http://images.example.com/path/to/some/image.jpg http://example.com/path/to/some/image.jpg

ただし、他の有効なリクエストもサブドメインとtldの両方で解決されます。 http://example.com/blog/post/Some-Interesting-Non-Image-Content http://images.example.com/blog/post/Some-Interesting-Non-Image-Content

画像がストリーミングされる場合、URLに画像拡張子が付いていると仮定しましょう。に画像拡張子で終わらない.htaccessすべてのリクエストをにリダイレクトするための書き換え条件/ルールを書きたいと思います。また、逆のルールが欲しいのですが。のリクエストが来た場合-にリダイレクトします。images.example.com(\.gif|\.png|\.jpeg|\.jpg)example.com(\.gif|\.png|\.jpeg|\.jpg)example.comimages.example.com

私はいくつかのことを試しましたが、失敗したようです(.htaccess正規表現を理解するのに問題があります):

RewriteCond %{HTTP_HOST} ^images\.example\.com (.*) (?!\.jpg|\.gif|\.jpg|\.jpeg)$
RewriteRule ^(.*) http://www.example.com/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^example\.com (.*) (\.jpg|\.gif|\.jpg|\.jpeg)$
RewriteRule ^(.*) http://images.example.com/$1 [R=301,L]
4

1 に答える 1

1

%{HTTP_HOST}変数には、HTTP「ホスト」リクエストヘッダーで送信されるホスト名のみが含まれます。したがって、その中のリクエストURIのようなものを一致させることはできません。RewriteRuleこれは、変数の正規表現パターンまたは変数に対して行うことができ%{REQUEST_URI}ます。試す:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^images\.example\.com$ [NC]
RewriteRule !\.(jpe?g|gif|ico|png)$ http://www.example.com%{REQUEST_URI} [R=301,L,NC]

RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ [NC]
RewriteRule \.(jpe?g|gif|ico|png)$ http://images.example.com%{REQUEST_URI} [R=301,L,NC]

NCフラグは、大文字と小文字を区別しない一致を示すためのものです。

于 2012-12-27T03:22:25.050 に答える