0

特定のサブドメイン リンク形式を使用している場合、サブドメインの訪問者のみが直接アクセスできるようにしようとしています。これによりSEもブロックされることはわかっていますが、とにかくサブドメインをインデックスに登録したくありません.

許可されたリンクは次のようになります。

subdomain.maindomain.com/aaa/bbb/ccc

これを次のように書き換える必要があります。

subdomain.maindomain.com/index.php?a=aaa&b=bbb&c=ccc

この形式でなく、空または外部リファラーから来るものはすべて、変数なしでメイン ドメインに移動します。

maindomain.com/

あらゆる種類の構成を試してみましたが、サブドメイン フォルダー内の最後の .htaccess ファイルは次のようになります。

RewriteEngine on
RewriteRule ^/?(\w{3})/(\w{3})/(\w{3})$ index.php?a=$1&b=$2&c=$3 [S=1,L]

RewriteCond %{HTTP_REFERER} !^http://(www\.)?maindomain\.com [NC]
RewriteRule ^(.*)$ http://domain\.com/ [L]

しかし、それはまだ私が望むことをしていません。許可されたフォームのサブドメインのリクエストもメインドメインにリダイレクトし、メインドメインへのリクエストとして変数を追加し、このページに移動します

maindomain.com/?a=aaa&b=bbb&c=cee

上記の条件について教えてください。

そして、パフォーマンスに関する 2 番目の質問: PHP を使用してこの検証/リダイレクトを行うことはもちろん可能ですが、あなたの意見では何がより効率的でしょうか?

ありがとうございました!

4

2 に答える 2

1

あなたのロジックを正しく理解できたら、これを試してください:

RewriteEngine on
RewriteBase /

# Don't do any more rewrites if on index.php
# Note that you can add the HTTP_HOST condition here if you only want it to be active for the subdomain
RewriteRule ^index\.php$ - [L]

# If on subdomain then check that the referer is from main domain and attempt to match a regex
# If we find a match then ignore the next rule that rewrites subdomain to domain.com
# Basically this is like an awkward if-else statement..
# ================    

RewriteCond %{HTTP_HOST} ^subdomain\.domain\.com$
RewriteCond %{HTTP_REFERER} ^http://(www\.)?domain\.com [NC]
# Rewrites /aaa/bbb/ccc to /index.php?a=aaa&b=bbb&c=ccc
RewriteRule ^(\w{3})/(\w{3})/(\w{3})$ index.php?a=$1&b=$2&c=$3 [S=1,L]

# Redirect all requests from subdomain to domain.com by default
# ================   

RewriteCond %{HTTP_HOST} ^subdomain\.domain\.com$
# Add the trailing question mark to delete all query parameters
RewriteRule .* http://domain.com/? [L]
于 2013-03-16T09:45:00.213 に答える
0

あなたはかなり近いです。いくつかの追加部品のみが必要です

  • フラグS=1は害はありませんが、必要でもありません。
  • リファラー条件を最初のルールに移動し、それを反転します。サブドメインも許可したい場合があります。
  • index.phpメイン ドメインへのリダイレクトから除外する否定的な条件を追加します。
  • 2 番目のルールの置換で元の要求を使用しないため、取得する必要はありません。
  • 疑問符?を追加して、引数がメイン ドメインに転送されないようにします。
  • Rリクエストを書き換えるだけでなく、クライアントをリダイレクトする場合は、フラグを追加します。

すべてのパーツを一緒に

RewriteEngine on

RewriteCond %{HTTP_REFERER} ^http://(.+\.)?maindomain\.com [NC]
RewriteRule ^(\w{3})/(\w{3})/(\w{3})$ index.php?a=$1&b=$2&c=$3 [L]

RewriteCond %{REQUEST_URI} !$index\.php$
RewriteRule ^ http://domain\.com/? [R,L]

パフォーマンスに関しては、.htaccess だけで書き換えまたはリダイレクトすると、PHP スクリプトに到達する前にジョブが完了します。なので、.htaccessでやったほうがいいと思います。

于 2013-03-16T12:10:48.570 に答える