【问题标题】:Country Specific Shopping Cart特定国家/地区的购物车
【发布时间】:2012-04-01 11:35:19
【问题描述】:

我目前正在为客户构建一个购物车,但他想要不同国家/地区的不同版本,因此我创建了 2 个子域,一个名为 europe.website.com,一个名为 row.website.com

On my .htaccess I also have this...
# Make all requests have www in them
RewriteEngine On
RewriteCond %{HTTP_HOST} ^website\.com
RewriteRule ^(.*)$ https://www.website.com/$1 [R=permanent,L] 

只是这样它会强制使用 www。在网站上,但这对子域应该没有影响,但是因为它有“https”,所以我遇到了安全风险,例如

本网站提供的安全证书是为 不同的网站地址。

安全证书问题可能表明试图欺骗您或 拦截您发送到服务器的任何数据。

我们建议您关闭此网页,不要继续浏览此网页 网站。

这就是你可以看到的第一个问题!第二个问题是它没有重定向到那些子域,我不知道为什么!这是我在主网站上的 index.php 上使用的 php 代码块....

<?php
$lc = ""; 
if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])){
    $lc = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
}
if($lc == array("ab", "ad","ae","af","ag","al","am","ao","aq", "aa", "af", "sq", "am", "ar", "an", "ac", "as", "aw", "ax", "az", "bb", "bd", "bf", "bg", "bh", "bi", "bj", "bm", "bn", "bo", "br", "bs", "bt", "bv", "bw", "by", "bz", "ca", "cc", "cd", "cf", "cg","ci","ck","cl","cm","cn","co","cr","cu","cv","cx","dj","dm","do","dz","ec","ee","eg","eh","er","et","fj","fk","fm","fo","fx","ga","gd","ge","gf","gh","gl","gm","gn","gp","gq","gs","gt","gu","gw","gy","hk","hm","hn","ht","id","il","in","io","iq","ir","is","jm","jo","jp","ke","kg","kh","kl","km","kn","kp","kr","kw","ky","kz","la","lb","lc","lr","ls","ly","ma","md","me","mf","mg","mh","mk","ml","mm","mn","mo","mp","mq","mr","ms","mu","mv","mw","mx","my","mz","na","nc","ne","nf","ng","ni","np","nr","nt","nu","nz","om","pa","pe","pf","pg","ph","pk","pl","pm","pn","pr","ps","pw","py","qa","re","ru","rw","sa","sb","sc","sd","sg","sh","sj","sl","sn","so","sr","ss","st","su","sv","sy","sz","tc","td","tf","tg","th","tj","tk","tm","to","tp","tr","tt","tv","tw","tz","ug","um","us","uy","uz","va","vc","ve","vg","vi","vn","vu","wf","ws","ye","yt","yu","za","zm","zr","zw")){
    header("location: https://row.website.com/index.php");
    exit();
} else if($lc == array("an", "at", "ba", "be", "ch", "cs", "cy","cz", "de", "dk", "es", "eu", "fl", "fr", "fx", "gi", "gr", "hr", "hu", "ie", "it", "li", "lt", "lu", "lv", "mc", "mt", "nl", "no", "pt", "rs","ro", "se", "sl", "sk", "sm", "tn", "ua", "uk", "xk" )){
    header("location:  https://europe.website.com/index.php");
    exit();
}
?>

由于我在英国,我决定将“uk”添加到重定向到我的欧洲子域的数组中,但没有这样的运气,并要求美国的其他朋友检查该站点并查看它是否重定向但仍然没有乐趣,因为它只是停留在主域上!

有人有线索吗?提前致谢!

-菲利普·杜斯

更新

好吧,我已经再次更改了它,我已经要求国外的人检查该网站,但它仍然没有重定向!这是我的代码....

<?php
$lst ['euro'] = array("be","bs",ECT ECT...);
$lst ['other'] = array("ab","aa","af");
$lc = ""; 
if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])){
    $lc = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
}
else $lc = 'en';
if(in_array($lc, $lst['other'])){
    header("location: https://www.WEBSITE.com/row/index.php");
    exit();
}
elseif (in_array($lc, $lst['euro'])) {
    header("location: https://www.WEBSITE.com/europe/index.php");
    exit();
}
else {
    header("location: https://www.WEBDESITE.com/index.php");
    exit();
}
?>

决定摆脱子域,因为 ssl 对它们不起作用,只需向其中添加 2 个新目录!

再次提前非常感谢大家! -菲利普·杜斯

【问题讨论】:

  • 您的证书仅针对顶级域颁发,不包括子域。您必须获得包含子域的证书...
  • 我可能会删除子域,然后在根目录中放置新目录,看看是否可行
  • +1 给 Gumbo 以注意国家代码。

标签: php arrays .htaccess redirect


【解决方案1】:
$lcode = explode(";", $_SERVER['HTTP_ACCEPT_LANGUAGE']);
$lcode = explode(",", $lcode['0']);
$lc = $lcode['0'];

但也许这会得到相同的结果......

编辑:只需检查您获得的语言代码? echo $lc;

此外,如果 $_SERVER['HTTP_ACCEPT_LANGUAGE'] 未设置,您需要提供默认语言(可能是“en”)。

编辑:如果语言代码不在两个数组中的任何一个中,您还需要重定向到默认域。例如,如果代码是“en”会发生什么?为什么顶部数组中没有“en”?

更新:好的,你的 php 逻辑语句也有错误。使用in_array(),像这样:

<?php
  $lst_euro = array(array("an", "at", ...);
  $lst_other = array(array("ab", "ad", ...);
  $lc = ""; 
  if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])){
    $lc = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
  }
  else $lc = 'en';
  if(in_array($lc, $lst_other)){
      header("location: https://row.website.com/index.php");
      exit();
  } 
  elseif(in_array($lc, $lst_euro)) {
    header("location: https://europe.website.com/index.php");
    exit();
  }
  else {
    header("location: https://row.website.com/index.php");
    exit();
  }

?>

【讨论】:

  • 似乎工作得更好,感谢 Stefan,看起来我使用的是国家代码而不是语言代码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-20
  • 1970-01-01
  • 2021-06-10
  • 2020-11-28
  • 2017-01-18
相关资源
最近更新 更多