-1

您好,我通过一个不起作用的标头功能而发疯。

这个想法是,当用户调用页面 foo.php 时,他将被标头。因此我包含了来自 script.php 的脚本

该脚本从以下位置读出有关已接受语言的信息

$_SERVER["HTTP_ACCEPT_LANGUAGE"])

好的,我有首选语言和国家代码,我需要将 foo.php 标头到正确的语言方向。script.php 中的代码如下:

if ($pref_language == 'af'){
    header('Location:en'.$_SERVER['SCRIPT_NAME']);
    exit;
}
if ($pref_language == 'sq'){
    header('Location:en'.$_SERVER['SCRIPT_NAME']);
    exit;
}

所以这些例子会将 foo.php 标头到目录

根/en/foo.php

现在,当仅调用位于 root/scripts/script.php 中的 script.php 时,我将标头为 root/en/scripts/script.php。这就是为什么我想在所有带有 header() 的 if 语句中添加 if 条件;只发生在 root/scripts/ 之外的文件。

所以我补充说:

$filename = $_SERVER['SCRIPT_NAME'];
$path = $_SERVER['HTTP_HOST']."/scripts".$_SERVER['SCRIPT_NAME'];

if (isset($path == false)){

    if ($pref_language == 'af'){
        header('Location:en'.$_SERVER['SCRIPT_NAME']);
        exit;
    }
    if ($pref_language == 'sq'){
        header('Location:en'.$_SERVER['SCRIPT_NAME']);
        exit;
    }
}

那是行不通的。所以如果有人可以帮助我,我真的很感激。

多谢。

4

1 回答 1

1

这可能是您的解决方案,虽然它在某种程度上有点愚蠢,但会完成这项工作:

<?php

$unwanted_dir = "/scripts";

// this will make sure that the script name doesnt start with "/scripts" 
if (substr($_SERVER['SCRIPT_NAME'], 0, strlen($unwanted_dir)) != $unwanted_dir){

    if ($pref_language == 'af'){
        header('Location:en'.$_SERVER['SCRIPT_NAME']);
        exit;
        }
    if ($pref_language == 'sq'){
        header('Location:en'.$_SERVER['SCRIPT_NAME']);
        exit;
        }
}
?>

另一种方法是正则表达式,但这更简单

我建议您在选择语言时使其更加动态。IE:

<?php

$unwanted_dir = "/scripts";
$pref_language == 'af';  // dynamicaly set the language
$full_path = '/home/php/site/';

// this will make sure that the script name doesnt start with "/scripts" 
if (substr($_SERVER['SCRIPT_NAME'], 0, strlen($unwanted_dir)) != $unwanted_dir){

    if (is_dir($full_path . $pref_language)){
        header('Location:'$full_path . $pref_language . $_SERVER['SCRIPT_NAME']);
    }
    else{
        echo "Sorry, we don't support your language";
        // or
        // header('Location:go/to/unsopported/languages.php');
    }

    exit;
}
?>
于 2012-12-13T19:53:45.533 回答