2012-02-14 18 views
2

現在のリファラーが自分のドメインでない場合、動作が異なる.htaccess mod_rewriteを作成しようとしています。たとえば、example.comを所有しているとします(例:www.example.com、http://example.comなど)。誰かがexample.com(またはbeta.example.comなどのサブドメイン)に行くと、この.htaccessルールを無視したいと思います。だから私は正規表現は基本的にちょうどそれのどこかにexample.comを探して、それらを無視すると思います。.htaccess reffererが現在のドメインでないかどうかを確認します。

しかし、otherdomain.com(cnameやAレコードを介してexample.comを指すと想定される)などのドメインが自分のサイトにアクセスしているので、どこかにリダイレクトしたいと思います。私がこれまでにしてきたことは、私が近くにいると信じているが働いていないことである。

これらのルールと私の主な混乱は、RewriteRule(この場合は^ $)の後ろにある部分です。私はGoogle検索にいくつかの異なるものがあるのを見てきましたが、その違いについてはわかりません。例えば、私も試してみてください、私も

RewriteCond %{HTTP_REFERER} ^http://(.+\.)*\.com 
RewriteCond %1 !^(example)\.$ 
RewriteRule ^$ redirectfile.php [R=302,L] 

答えて

2

をいじってきたなどだけ^(。*)$、

RewriteCond %{HTTP_REFERER} !^http://([^.]+\.)*(example)\.com 
RewriteRule ^$ redirectfile.php [L] 

を見てきました

RewriteCond %{HTTP_REFERER} !^http://([^.]+\.)*example\.com 
RewriteRule^redirectfile.php [L] 

あなたは^$を持っていましたが、これはホームページにのみ一致します。

すべてのリクエストに一致させることを前提に、すべてのリクエストに一致するちょうど^に変更しました。

(.*)$はまた、すべての要求に合致していますが、$ 1とターゲットにそれらの説明については

+0

おかげで再利用するようにも試合をキャプチャします。しかし、それらのルールは機能しているようには見えません。それは常にリダイレクトしています。 random.example.com(これはルールを無視する必要があります)とtest.local(同じサーバーを指していますが、ルールに従う必要があります)を使用してテストします。これらのそれぞれのケースでは、$ _SERVERとHTTP_REFERERをダンプしたPHPファイルにリダイレクトさせて、正しい値を持つHTTP_HOSTを使用しようとしました。しかし、ルールにはまだ運がありません。それはHTTP_HOSTがその正規表現のようなhttpを含んでいないからですか? – joshholat

+0

私の最後の声明はそれでなければなりません。私はhttpの部分を取り出し、HTTP_HOSTを使いました、そして、今働いています。 HTTP_HOSTを使用するのは安全ですか?とにかくHTTP_REFERERよりも信頼性が高いでしょう。 – joshholat

+1

@joshholat 'HTTP_HOST'はより信頼性が高くなりますが、あなたが来たページのドメインではなく、要求しているページのドメインを常に提供します。後者が必要な場合は、 'HTTP_REFERER'を使うべきです。ブラウザに直接URLを入力したり、ブックマークしたり、安全なページから来た場合は、「HTTP_REFERER」は空白(空文字列)になります。 –

関連する問題