GoogleとStackOverflowでこの質問に対する答えを見てきましたが、.htaccessについてよくわからないという事実は正しい答えを決定するのに役立ちません私の状況のために、私はここで尋ねています。.htaccess RewriteCond URIにドメインが含まれていない
私の状況では、サーバー上のルートと同じ物理ディレクトリを使用しているいくつかのサイトがあります。
これはうまくいきましたが、正しいドメインに属していない限り、各サイトがブラウザから画像などにアクセスできないようにしたいと考えていました。
現在、私はこのようなファイル構造を持っている:
/resources/{resource}/{full_domain_name}
ですから、例えばwww.domain.co.uk
のために、このような構造なければなりません:
http://www.domain.co.uk/resources/images/www.domain.co.uk/some_image.jpg
をしかしwww.domain_2.co.uk
は、サイトの同じ物理ディレクトリを使用して存在している場合rootの場合、次のように自分のドメインから他のドメインのリソースを見ることができます:
http://www.domain_2.co.uk/resources/images/www.domain.co.uk/some_image.jpg
これらのディレクトリには機密情報が全く格納されていないので、これは実際には大きな問題ではありませんが、迷惑になり、ユーザーがこれを行うことができなくなります。
そうでない場合は403にリダイレクト私は基本的にURIが現在のドメイン名が含まれていることを確認する
などのI /リソースディレクトリに.htaccessファイルを入れてみましたが、私は正規表現とこだわっていますエラーページ。
これは私が思い付いたものです:いくつかのフォルダがあるので、私は[^/]
ビットに入れた理由は、例えば、
RewriteCond %{REQUEST_URI} !^(/resources/[^/]*/%{HTTP_HOST})(.*)$
RewriteRule ^(.*)$ /error/403.php
:
/resources/images/{full_domain_name}
/resources/scripts/{full_domain_name}
/resources/stylesheets/{full_domain_name}
誰がこれらで私を助けてもらえ条件?
ご協力いただければ幸いです。
現在のルールの結果はどうなりますか? */resources/[^ /] * /%{HTTP_HOST}の周りに '()'を必要としない点を除いて、うまくいくようです。* ' –
@Michael現在私がwww.domain.coにいる場合.ukとwww.domain.co.uk/resources/stylesheets/www.domain.co.uk/style.cssに行きます。たとえば、私は/error/403.phpファイルにリダイレクトされます。 .htaccessルールを削除すると、正常に実行されるはずのファイルが検索されます。 –
正規表現で表現されている '%{REQUEST_URI} '全体は実際には必要ありません。 http_host 'RewriteCond%{REQUEST_URI}!^。+%{HTTP_HOST} 'と一致することができます。 –