【发布时间】:2011-09-03 08:54:52
【问题描述】:
我正在帮助建立一个网站,该网站将在同一域上托管不同地区的内容。比如:
www.example.com/us/
www.example.com/uk/
www.example.com/fr/
等等
我有一个系统询问用户他们想查看哪个网站(然后将他们的偏好存储在 cookie 中)。我的问题是:如果他们访问一个 URL(例如:www.example.com/us/contact.php)并且他们的偏好 cookie 显示 /fr/,我如何最好地将他们转发到 www.example.com/fr/contact。 php?
系统可以读取他们所在的站点区域以及他们的 cookie 所说的内容。所以我们会知道的信息是:站点:美国和 Cookie:法国。
我正在考虑使用$_SERVER['SCRIPT_NAME'] 并使用正则表达式从 URL 中获取“contact.php”。然后使用header("Location: [url]");,但我知道如果已经将任何文本传递给浏览器,Location 将不起作用......这会产生各种问题。
编辑:
这里有一些代码可以更清楚地解释这个问题:
<?php
// Get variable contents for $cookieRegion and $siteRegion
if($cookieRegion != '') { // If Cookie has been previous set
if($cookieRegion != $siteRegion) { // If Cookie pref clashes with site URL
// Forward to correct URL
}
}
else { ?>
<script type="text/javascript">
$(document).ready(function(){
// Display modal window asking user preference
});
</script>
<?php } ?>
所以<script> 标签会放在文档开始之前...不是一个好主意!
解决这个问题的最佳方法是什么?
或者,有没有更好的方法来处理我可以实施的整个问题?
【问题讨论】:
-
如果您在发送任何输出之前放置语言检测功能 - eg 在渲染模板之前,或者在
<!DOCTYPE ...><html xmlns="...">...之前,如果您使用平面脚本(不是 MVC)——您仍然可以发送位置,然后使用exit()来停止执行任何不必要的操作。 -
@jwandborg,问题是如果没有设置Cookie,我想在页面加载后运行一些Javascript,并且我无法放置必要的JS(来自“else ") 在文档加载之前... :-/
-
您无法将用户重定向到与您要求语言相同的页面加载中的正确页面,您必须假设他们先说英语,然后再进行对话。此代码可以存在于文档中的任何位置,但必须在任何输出之前执行
header()语句。 -
@vartec,您可能应该在发表评论之前阅读整个问题。您还应该阅读您发布的链接的内容。我是帮助构建答案的那个问题的编辑之一。在这里,你需要这个:
*facepalm*
标签: php javascript html regex