問題タブ [hashbang]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
facebook - Facebookのシバン/ハッシュバン(#!)と新しいTwitterのURLは何ですか?
私たちが今まで使用していた長くて複雑なFacebookのURLが次のようになっていることに気づきました。
http://www.facebook.com/example.profile#!/pages/Another-Page/123456789012345
私が思い出す限り、今年の初めには#
、感嘆符のない、通常のURLフラグメントのような文字列(で始まる)でした。しかし、今ではシバンまたはハッシュバン(#!
)になりました。これは、以前はシェルスクリプトとPerlスクリプトでしか見られませんでした。
新しいTwitterURLにも#!
記号が含まれるようになりました。たとえば、TwitterプロファイルのURLは次のようになります。
http://twitter.com/#!/BoltClock
#!
新しいFacebookとTwitterのインターフェースが主にAjax化されたため、特定のAjaxフレームワークなど、URLで特別な役割を果たしていますか?
これをURLで使用すると、Webアプリケーションに何らかのメリットがありますか?
ajax - Ajaxの履歴とブックマークを使用する場合、常に「#!」を使用することをお勧めしますか?「#」だけでなく?
Facebookは、URL#!
だけでなく、Ajax履歴([戻る]および[進む]ボタン)とブックマークを使用しています。#
通常のアンカーがAjax履歴メカニズムに干渉して、通常のアンカーの処理をトリガーする可能性があると考えていたので、これを行うことは常に良い考えですか。
したがって、Ajax履歴関数は、ハッシュ部分を処理するのは、だけでは#!
なく、表示された場合のみ#
です。
そして!
、主要なブラウザと互換性のあるものを使用していますか?Facebookがを使用し!
ている場合、それはかなりよくサポートされている可能性があると推測されます。
javascript - ハッシュバンスラッシュまたはスラッシュなし?
私たちはやるべきですsite.com/#!/blog
かsite.com/#!blog
?
実際の違いはないことは理解していますが、Web 開発者のコミュニティとしては、ユーザーが URL を簡単に覚えられるように従来の標準が存在する必要があります。まだ確立された基準がない場合、理想的には、誰かが一方を支持する回答を投稿し、誰かが別の回答を支持して別の回答を投稿し、一方が他方よりも多くの票を獲得します...
個人的に私が好むsite.com/#!blog
のは、単純に短いからです。ただし、他の多くのサイトが他のバリアントを使用しているのを見てきました。
ところで、ハッシュバングを使用しないように指示することが最初の本能である場合、この質問はあなた向けではありません。そのままにしておいてください。
ajax - hashbang / shebangを使用する必要がありますか?
シェバン(#!)のアイデアはとてもグーグルだったとここで読んだ
同じページの「状態」を提供する代替の従来のURLが存在することを知っています
したがって、これらのハッシュ状態に対応する従来のURLがない場合、シバンではなくハッシュのみを使用する必要があると言うのは正しいでしょうか。
背景:ハッシュは検索フォームに基づいて作成され、検索結果は同じページに読み込まれます。ハッシュは、人々がハッシュのあるURLに戻って同じ検索を繰り返すことができるように、そこにあります。
もっと広く言えば、ハッシュに対応する実際のURLが必要な理由はありますか?
.htaccess - リダイレクトによる .htaccess mod_rewrite 変数
短縮版:
私は質問を書きましたが、ほとんどの人はそれほど多くのテキストを読みたくないことに気付きました。以下の参照を検討してください。TL;DR は次のとおりです。
この URL を 301 リダイレクトする必要がありますhttp://app.com/search/foo-bar/
このURLにhttp://app.com/#!/search/foo-bar/
これを送信します: /foo-bar/
、または過去/search/
のものをサーバー側スクリプトに送信します。この例では、php で記述されています。
わかりやすくするために編集します。
現在の回答は、ハッシュバンへの書き換えに焦点を当てているようです。その部分は問題ではありません。問題は、サーバー側が app.php/#!/foo-bar/ ではなく app.php を場所と見なすため、ハッシュバン URL に書き換えると関連データが失われることです。したがって、foo-bar をキャプチャする必要があります。 、URL 以外の場所でサーバーに送信します。書き換えは機能し、問題ではありません。あなたの答えをありがとう!
長いバージョン:
わかりました、私には理解するのが難しい興味深い問題があります。
シナリオ:
状態に hashbang を使用する backbone.js アプリがあります。
app.com/#!/search/search-term/key-value/foo-bar/
さらに、「pretty url」スタイルの URL をヒットする以前のバージョンからサイトに来る Google トラフィックがあります。
app.com/search/search-term/key-value/foo-bar/
ユーザーがレガシー URL にアクセスした場合、.htaccess mod_rewrite を使用して、古い URL をハッシュバン グされた URL に交換します。
私は最近、適切にダウングレードしてクローラーをサポートするために、サイトがその上に構築される JavaScript を使用しないブートストラップ バージョンのサイトを導入しました。これはphpを使用して書かれています。
PHP サイトを機能させるには、hashbang の後の値をサーバー サイド スクリプトに渡す必要があります。これにより、何を表示するかを判断できます。
問題:
URL を変換してアンカーを追加すると、アンカー (ハッシュバン) を超えるものはすべてリクエストに送信されなくなるため、php でアクセスできません。
RewriteRule search/?(.*) #!/search/$1 [R=301,NC,L]
サーバー側に物を送信するための私のオプションは、次のように削減されます。 1. クエリ文字列 2. 環境変数 3. ヘッダー
だから、私はクエリ文字列を介して物事を送信しようとしました
RewriteRule search/?(.*) #!/search/$1?filter=$1 [R=301,NC,L]
明らかにそれはうまくいきませんでした(クエリはアンカーの後ろにあります)ので、ハッシュバンの前で試しました
RewriteRule search/?(.*) ?filter=$1/#!/search/$1 [R=301,NC,L]
それは機能しますが、エンドユーザーにとっては恐ろしく冗長です。そこで、環境変数を使ってみようかなと思いました。
RewriteRule search/?(.*) /!#/search/$1 [R=301,NC,L,E=FILTER:$1]
環境変数はリダイレクトによって保持されないため、これは失敗しました (duh)。私はヘッダーを使用するようになりました:
RewriteRule search/?(.*) /#!/search/$1 [R=301,NC,L,E=FILTER:$1]
Header set filterParams "%{FILTER}e"
しかし、何らかの理由で、リダイレクトを介してページがヘッダーを受信しません。それは理にかなっているように見えました (私は今、Apache ディレクティブで私の快適さのレベルをはるかに超えていますが)、ヘッダーをエコーしてみました。 )、そして反響しました。
RewriteRule search/?(.*) /#!/search/$1 [R=301,NC,L,E=FILTER:$1]
Header set filterParams "%{FILTER}e"
Header echo filterParams
灘 - フィルターが存在しないため、サーバーに到達しますが、null です。次に考えたのは、ある種の条件を採用することでした。これが私の試みでした:
それもうまくいかないようだったので、私は困惑しています。私はこれに長い間費やしてきたので、おそらく解決策を把握している可能性があり、それを見るのにうんざりしているか、ひどいヘッダーハッキングを使用しても、リモートでさえ不可能であることに気づきました。
誰でもこれを行う方法の手がかりを持っていますか?
url - URL規則のこの新しい`#!`は何ですか?
いくつかの人気のあるサイトが新しいURL(従来の?)に切り替え始めたことに気づきました。このURLでは、URIセグメントのプレフィックス/
がではなく。になってい#!/
ます。
たとえば、Twitterhttp://twitter.com/stackoverflow
に入力すると、すぐににリダイレクトされhttp://twitter.com/#!/stackoverflow
ます。
これをツイッターだけで見ていたら、二度と考えたことはなかったでしょうが、今は他のサイトでも見ています。
これはURLリダイレクトの新しい規則ですか?これについてどこでもっと知ることができますか?
javascript - pushState と SEO
多くの人が、hashbang ではなく pushState を使用すると言っています。
私が理解できないのは、hashbang を使用せずに検索エンジン フレンドリーにするにはどうすればよいかということです。
おそらく、pushState コンテンツはクライアント側の JavaScript コードによって生成されます。
したがって、シナリオは次のとおりです。
私はオンexample.com
です。ユーザーがリンクをクリックします:href="example.com/blog"
pushState はクリックをキャプチャし、URL を更新し、どこかから JSON ファイルを取得し、コンテンツ領域にブログ投稿のリストを作成します。
ハッシュバングを使用すると、Google は escaped_fragment URL にアクセスして静的コンテンツを取得することを知っています。
pushState を使用すると、JavaScript コードを使用して JSON を読み込んでテンプレートを作成することができないため、Google は何も認識しません。
私が見ることができる唯一の方法は、サーバー側でテンプレートをレンダリングすることですが、それはアプリケーション層をクライアントにプッシュする利点を完全に無効にします.
それで、私はこれを正しく理解しています.pushStateは、クライアント側のアプリケーションにとってSEOフレンドリーではありませんか?
jquery - ハッシュバンとエスケープされたフラグメント
そのため、SEO AJAX のマラーキー全体を調査し、ここにテスト ページを設定しました: My Site
GitHub のサンプル コードを使用しました。ハッシュバンはご覧のとおり正常に動作しますが、ハッシュバンをGoogle が解釈するよう#!
に置き換えて、任意のページにアクセスしてみてください。?_escaped_fragment_
ある程度、ページが読み込まれません。ホームページが読み込まれます。
私はこれが2つのことのうちの1つ、おそらく両方であると推測しています:
- HTML スナップショットはありません
- コードが間違っています..
または、私はこれを取得していません..
私が使用したコードはここにあります: https://github.com/bartaz/jquery-address/tree/master/samples/crawling
何か助けはありますか?
php - escaped_fragment リクエストは php を解析しませんか?
最近、Google の AJAX クロール メソッドに従ってサイトを再構築しました。
すべてが正常に機能し、?_escaped_fragment_=
リクエストは正常に機能しますが、ページ上の php が解析されておらず、次のようにコメントアウトされていることに気付きました。<!--?php echo $myvar ?-->
なぜこれが起こっているのか知っている人はいますか?? ここに私のインデックスからのいくつかのPHPがあります:
そこに正規表現があることに気づきました。ひょっとしたら、それと関係があるのでしょうか?ここで何が起こっているのか完全には理解できません。私は専門家ではありません。これがこのようにとどまるなら、私のサイトを元に戻したくありません..
ここで手を貸してください
javascript - javascript(phantomjs)を使用したhashbangリンクのナビゲート/スクレイピング
ほぼ完全にJavaScriptで生成されたWebサイトのHTMLをダウンロードしようとしています。したがって、ブラウザアクセスをシミュレートする必要があり、PhantomJSで遊んでいます。問題は、サイトがハッシュバンURLを使用していて、PhantomJSにハッシュバンを処理させることができないようです。ホームページを呼び出し続けるだけです。
このサイトはhttp://www.regulations.govです。デフォルトでは、#!homeに移動します。次のコード(ここから)を使用して、さまざまなハッシュバンを処理してみました。
このコードは正しいハッシュバンを生成しますが(たとえば、ハッシュを「#!contactus」に設定できます)、動的に異なるHTMLを生成することはなく、デフォルトのページだけを生成します。ただし、を呼び出したときの出力は正しく行われますdocument.location.hash
。
また、初期アドレスをハッシュバンに設定しようとしましたが、スクリプトがハングして何もしません。たとえば、URLをhttp://www.regulations.gov/#!searchResults;rpp=10;po=0
スクリプトに設定すると、アドレスを端末に出力した後にハングし、何も起こりません。