目的:ユーザーの出発地がロンドンの場合は、ユーザーを特定のリンク先ページ/パスにリダイレクトします。Drupal 7.xでPHPリダイレクトを正しく実装する方法は?
問題:以下のリダイレクト方法を実施 戻り、次の失敗の結果:
何も起こらない>>ヘッダ( "http://mywebsite/subcat")。
- リダイレクトが多すぎます>> header( "Location:http://mywebsite/subcat");
- リダイレクトが多すぎます>> header( "Location:/ path");
- リダイレクトが多すぎます>> drupal_goto( "http://mywebsite/subcat");
- リダイレクトが多すぎます>> drupal_goto( "/ path");
- エンドレスループ>> JS: window.location.replace( "http://example.com/path");
IMPLEMENTATION: 私は、スタンドアロンのPHPで使用された場合正常に動作し、いくつかの異なったSOの記事(とすぐに私は私が探したポスト覚えて信用を与えるだろう)(から以下のスクリプトをハッキングheader.tpl.phpの上にある最初のブロック(または私のカスタムモジュール[hook_initを使って)]の中に最初のブロックとして配置されている場合、同じ結果が問題に表示されます。 USED
FUNCTION:私のコードで
<?php
function get_client_ip()
{
if (!isset ($_SERVER['REMOTE_ADDR'])) {
return NULL;
}
$proxy_header = "HTTP_X_FORWARDED_FOR";
if (array_key_exists ($proxy_header, $_SERVER)) {
$client_ip = trim (end (explode (",", $_SERVER[$proxy_header])));
if (filter_var ($client_ip, FILTER_VALIDATE_IP)) {
return $client_ip;
} else {
// Validation
}
}
return $_SERVER['REMOTE_ADDR'];
}
$ip = get_client_ip(); // the IP address to query
$query = @unserialize(file_get_contents('http://ip-api.com/php/'.$ip));
if($query && $query['status'] == 'success') {
if ($query['country'] == "United Kingdom"){
header("Location: /mypath");
} else {
echo 'Unable to get location';
}
}
?>
の仮定
- 論理エラー。
- リダイレクト方法/ロジックの不適切な使用
- 他のモジュールの実行 によって上書きされるコードの不適切な配置。
あなたが求める答えとは無関係ですが、ロケーションヘッダーを発行した後で常に「exit」または「die」を呼び出す必要があります。ヘッダーが発行された後にコードが実行され、望ましくない副作用を引き起こす可能性があります。 – Scoots
@Scootsの注釈ありがとうございましたが、残念ながらそれは修正されませんでした。 – brooklynsweb
さて、私はそれが答えではないと言った、それはあなたが従うべき一般的なルールです。彼が「ログインしていなければ管理者からリダイレクトする」の後に、「終了」と呼んでいない人について、私が読んだところ、かなり素晴らしい話があった。長い話を簡単に言えば、Googleのbotはすべての「ページを削除」リンクをクリックした。 – Scoots