2016-03-22 8 views
0

私は、Google側とfacebookボットを私のサイトのサーバー側レンダリング版に送信する条件付き.htaccessファイルを設定しようとしています。通常のユーザーの場合は、JavaScriptベースのルーターでURLを読み取り、URLに基​​づいてビューをレンダリングするため、すべての要求をindex.htmlにリダイレクトする必要があります。ここでhtaccessを使用してボットとユーザーを別の場所に送信する

は私が

<IfModule mod_rewrite.c> 
    RewriteEngine on 

    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR] 
    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d 
    RewriteRule^- [L] 
    RewriteRule^/index.html [L] 

    RewriteCond %{HTTP_USER_AGENT} facebookexternalhit|Facebot|Googlebot [NC,OR] 
    RewriteRule .* /sharehandler/index.php [L] 
</IfModule> 

現在、すべてがindex.htmlをにリダイレクトされてきたものです。 GooglebotとFacebotを含む。

私が先頭にボットラインを移動した場合:

RewriteCond %{HTTP_USER_AGENT} facebookexternalhit|Facebot|Googlebot [NC,OR] 
RewriteRule .* /sharehandler/index.php [L] 

その後、すべてがすべてreguarユーザーを含む/sharehandler/index.phpにリダイレクトされます。 RewriteCondは評価されておらず、サーバは最初にRewriteRuleが何を見てもトリガします。

答えて

1

あなたの非ボットセクションでは、ボットからのヒットを除外しないので、最初のボットはすべてのものに一致します。あなたのボットセクションには、すべてが一致すると思われるいくつかのエラーが含まれています。

(作業中の)ボットセクションを最初に置くと、その条件に合致しない訪問者だけが次のセクションに到達します。

ので、最初のボットセクションのために:上部に置かれたとき、それはすべてのものと一致した理由

  • あなただけなので、1つのRewriteCondを持っている[OR]は不要な(そしておそらくある条件1またはNO条件だろうか?常に一致しますか?)

  • RewriteCond docsには、ユーザーエージェントに基づいてリダイレクトする方法の例が含まれています。あなたの正規表現はサブパターンなので括弧で囲む必要があります。ドキュメントも引用しています。非ボット区間については

  • に[OR]しないで、あなたは、要求が既存のファイルではなく、既存のディレクトリの両方でない場合に一致します。

  • あなたは、このセクションの2 RewriteRulesを持っている、唯一の1

  • このセクションでは、右のRewriteRuleどのように見えるかでパターンが有効な正規表現ではありませんがなければなりません。

ここで適用される上記の修正とアップデートされたバージョンです:

<IfModule mod_rewrite.c> 
    RewriteEngine on 

    RewriteCond "%{HTTP_USER_AGENT}" "(facebookexternalhit|Facebot|Googlebot)" [NC] 
    RewriteRule .* /sharehandler/index.php [L] 

    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f 
    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d 
    RewriteRule .* /index.html [L] 
</IfModule> 
0

はこのいただきありがとうございます!私は遠くまで私を助けて、自分でそれを終えることができました。

RewriteBase /を追加して通常のユーザーに正しくリダイレ​​クトする必要がありました。代わりに%{REQUEST_FILENAME}を使用しなければなりませんでした。

<IfModule mod_rewrite.c> 
    RewriteEngine on 

    RewriteCond "%{HTTP_USER_AGENT}" "(facebookexternalhit|Facebot|Googlebot)" [NC] 
    RewriteRule .* /sharehandler/index.php [L] 

    RewriteBase/
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule .* /index.html [L] 
</IfModule> 
関連する問題