1

質問は簡単に思えますが、3日間検索した後、あきらめました。ここで見つけられると思ったのですが、似たようなものがあるようですが、このようなものでは機能しません。

現在、以前の JS/AJAX 駆動の Web サイトに基づいて、非常に高度なマーケティングを行っている顧客がいます。彼のウェブサイトへのすべてのバックリンクは

サーバー/#! リンク

私はワードプレスのウェブサイトを構築しましたが、クロスリンクがページを適切に開くようにする必要があります。

しかし、私がこのリンクを取得した場合

サーバー/#! リンク

Wordpressで処理すると以下のURLが取得できます

サーバー /

唯一の方法、または少なくとも私が知っている唯一の方法はワードプレスで行うことですが、それは簡単ではないようです.

#! を追加できる次のスクリプトがあります。しかし、削除する必要があります(どこかで見つけました)

<?php 
    $webSiteUrl = get_bloginfo('url')."/";
    $pageURL = 'http';
    if ($_SERVER["HTTPS"] == "on") {
        $pageURL .= "s";
    };
    $pageURL .= "://";
    if ($_SERVER["SERVER_PORT"] != "80") {
        $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
    } else {
        $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
    };
    if($webSiteUrl!=$pageURL){
        $pageHash = substr($pageURL, strlen($webSiteUrl), strlen($pageURL));
        header("location:".$webSiteUrl."#!/".$pageHash."");
        exit;
    };
 ?>

きしむオシフラージのおかげで、あと少しです。あなたが提供したスクリプトには条件に問題があったため、このスクリプトを使用しました

if ('' !== window.location.hash && '#!' !== window.location.hash) {
  hash = location.hash.match(/^#!(.*)/)[1];
  /* ... do something with hash, like redirecting to */
  /* another page, or loading page content via AJAX. */
  /* If all you want to do is remove everything from */
  /* the URL starting with `#!', then try this:      */
  location.href = location.protocol+'//'+location.host+location.pathname;
}

うまくいくようですが、ルートページを取得します。

たとえば、私は開きます

myweb.com/#!thisone

そして私は得る

myweb.com/

そして、誰かが多くの時間を節約できるように要約するだけです-作業スクリプトは

if ('' !== window.location.hash && '!' !== window.location.hash) {
      hash = location.hash.match(/^#!(.*)/)[1];
      /* ... do something with hash, like redirecting to */
      /* another page, or loading page content via AJAX. */
      /* If all you want to do is remove everything from */
      /* the URL starting with `#!', then try this:      */
      location.href = location.protocol+'//'+location.host+location.pathname+'/'+hash;
    }
4

1 に答える 1

1

サーバーは URL のフラグメント部分 (つまり、# 記号とそれに続くすべてのもの) を認識しないため、PHP でこれを行うことはできません。

代わりに、クライアント側の Javascript を使用する必要があります。おそらくこのようなもの:

if /^#!/.test(location.hash) {
  hash = location.hash.match(/^#!(.*)/)[1];
  /* ... do something with hash, like redirecting to */
  /* another page, or loading page content via AJAX. */
  /* If all you want to do is remove everything from */
  /* the URL starting with `#!', then try this:      */
  location.href = location.protocol+'//'+location.host+location.pathname;
}

編集:私の理解が正しければ、リダイレクト URL の末尾にハッシュ値を配置する必要があります。それはとても簡単にできます。上記のコードの最後から 2 番目の行を次のように変更するだけです。

`location.href = location.protocol+'//'+location.host+location.pathname+'/'+hash;`

追加の「/」は不要な場合があります。詳細はお任せします:-)

于 2013-11-14T01:45:37.020 に答える