1

検索エンジン (つまり、Google/Bing ボットなど) によってインデックスを作成したい Apache Web サーバー上に AngularJS アプリがあります。サイトのページのスナップショットをクロールして取得するための PhantomJS スクリプトがあり、http://mysite.com/?_escaped_fragment_= * リクエストを適切なページにリダイレクトする方法に関するGoogle の指示に従いました。

私が直面している問題は、アンカーに基づいてコンテンツを変更するルートがアプリにいくつかあることです。たとえば、 http://mysite.com/#!/about はhttp://mysite.com/# !とは異なります。 /概要#概要. これらの変更をインデックスに登録したいのですが、ハッシュ文字 '#' がコメントに使用されており、バックスラッシュでエスケープしても機能しません。他の SO の回答 (例: ajax クロールの Apache rewrite conditionおよびmod_rewrite page anchor ) を参照しましたが、アンカーの処理方法に関する指示が見つかりませんでした。

2 つの質問があります。

  1. mod_rewrite を使用してアンカーを含むスナップショットに URL をリダイレクトする方法はありますか? たとえば、「#」(「%23」) のエスケープ バージョンを使用すると、次のようになります。

    http://mysite.com/?_escaped_fragment_=about%23overview => http://mysite.com/snapshots/about#overview.html
    

    アンカーのあるページでは機能しませんが、現在 .htaccess ファイルにあるものは次のとおりです。

    RewriteEngine On                                                                
    Options +FollowSymLinks                                                         
    
    # Route for the index page
    RewriteCond %{QUERY_STRING} ^_escaped_fragment_=/$                              
    RewriteRule ^(.*)$ snapshots/index.html [NC,L]  
    
    # All other routes                                
    RewriteCond %{QUERY_STRING} ^_escaped_fragment_=/?(.*)$                         
    RewriteRule ^(.*)$ snapshots/%1.html [NC,L]                                     
    
  2. (1) が許可されていない場合、この問題を解決する方法についての私の考えは、すべての '#' を '.' に置き換えることです。スナップショットのファイル名に。次に、「#」を「.」に置き換える mod_rewrite ルールが必要になります。escaped_fragment クエリ パラメータで。例に戻ると、現在、/?_escaped_fragment_=about#overview を受け取り、それを /snapshots/about.overview.html に再ルーティングするルールがあります。

    RewriteCond %{QUERY_STRING} ^_escaped_fragment_=/about%23overview$              
    RewriteRule ^(.*)$ snapshots/about.overview.html [NE,NC,L]                      
    

    このタイプのルーティングを実装するために使用できる簡単な一般規則はありますか?

一般的な書き換え条件でこの問題を解決する方法についての他のアイデアをいただければ幸いです。

4

1 に答える 1

1

次のルールが機能するはずです。

RewriteCond %{QUERY_STRING} ^_escaped_fragment_=([^&]+) [NC]
RewriteRule ^$ /snapshots/%1.html? [R,NE,L]   

にリダイレクト/?_escaped_fragment_=about%23overviewします/snapshots/about%23overview.html

于 2013-10-04T17:47:59.113 に答える