0

現在、WordPressの.htaccessルールを使用してindex.phpを「クリーンアップ」しているため、カスタムPHPソリューションを使用してWWWをスクリプトURLに強制的に追加しています。強制WWW.htaccessルールは、WordPressのindex.phpクリーンアップルールと互換性がありません。

私のスクリプトを使用すると、「http://scripturl.com/whatever」を参照できます。次に、私のスクリプトはリクエストURI「/ whatever」のケースを持ち、そのビューに対して何らかのアクションを実行します(またはそれぞれのテンプレートをコンパイルします)。

スイッチが呼び出される前に一連のチェックを追加しました。これにより、REQUESTのHTTPホストが、スクリプトで定義された変数のHTTPホストと一致することを確認します。これにより、「www」の追加が強制されます。

私の問題は、(IEのみを使用しているように見える)URLを入力すると、「http://myscript.com/whatever」と言うと、スクリプトがURLを「http://www.myscript.com/whatever」に変換することです。 "、予想どおり、ヘッダーを新しいURLにリダイレクトします。ただし、URIリクエストを「whatever」から「somethingelse」に変更すると、ページは期待どおりに「http://www.myscript.com/somethingelse」に移動しますが、少しの間、「whatever」がURLで点滅します。スクリプトが「http://www.myscript.com/somethingelse」にリダイレクトする前。

明確にするために:リクエスト「www.myscript.com/sam」から始めます。リクエストが読み込まれます。/samを/bobに変更->ページが「www.myscript.com/bob」に変更されますが、/bobがロードされる前に「/sam」がURLバーで短時間点滅します。

それはただ「きれい」に感じません。私のコードは余分なヘッダージャンプか何かをしているように感じます。「www.wordpressurl.com/valid-page」にアクセスし、URIを「www.wordpressurl.com/another-valid-page」に変更することで、これをワードプレスと対比しました- 「/valid-」が表示されません「/another-valid-page」にアクセスしようとすると、URLバーで「page」が点滅します。その逆も同様です。

これが私のコードです:

// Requested URL built from url in address bar
$requested_url  = is_ssl() ? 'https://' : 'http://';
$requested_url .= $_SERVER['HTTP_HOST'];
$requested_url .= $_SERVER['REQUEST_URI'];

// Correct url built from predefined variable
$correct_url = is_ssl() ? 'https://' : 'http://';

// "Correct" script url
$user_home = @parse_url('http://www.myscript.com');

if ( !empty($user_home['host']) )
  $correct_url .= $user_home['host'];
else {
  die('malformed url');
}

$correct_url .= $_SERVER['REQUEST_URI'];

// If URL in address bar is not proper, perform redirect (preserve URI)
if ($correct_url != $requested_url) {
  hc_redirect($correct_url, 301);
}

// Get page from request, handle accordingly
$page = $_SERVER['REQUEST_URI'];
switch ($page) {
  /* Index */
  case '/':
    echo "Index queried <br />";

    break;
    ...

新しいURIが(リダイレクトから)ロードされる前に、古いURIがナビゲーションバーで点滅するのはなぜですか?私が言ったように、これはIEでのみ発生するように見えますが、WordPressは(IEまたは他のブラウザーで)これと同じ動作をしないため、コードに何か問題があるはずです。私の知識。私はPHPに少し慣れていません。

何かご意見は?

編集:hc_redirect、およびその他の使用済み機能: http: //pastebin.com/fVNEckEg

4

1 に答える 1

2

リダイレクトした後もスクリプトはデータを出力し続け、ブラウザはデータを待ってからリダイレクトします。リダイレクトヘッダーを送信した後でスクリプトの実行を続行する必要がない場合は、スクリプトの実行を停止します。例えば:

// If URL in address bar is not proper, perform redirect (preserve URI)
if ($correct_url != $requested_url) {
    hc_redirect($correct_url, 301);
    die();
}
于 2012-05-20T22:51:27.137 に答える