我正在一个托管不同城市内容的网站上工作。每个内容都属于一个城市。
目标是根据用户访问过的城市向用户显示文章。
今天我有一个完美的解决方案,但它会大大降低网站的性能,因为它基于重定向。
以下是我目前在index.php中使用的代码:
$request_path = request_path();
if (empty($request_path)) {
header('Cache-Control: no-cache, must-revalidate, post-check=0, pre-check=0');
$is_https = isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on';
$http_protocol = $is_https ? 'https' : 'http';
$base_root = $http_protocol . '://' . $_SERVER['HTTP_HOST'];
$base_url = $base_root;
if ($dir = rtrim(dirname($_SERVER['SCRIPT_NAME']), '\/')) {
$base_path = $dir;
$base_url .= $base_path;
}
if (isset($_COOKIE['city']) && !empty($_COOKIE['city'])) {
if (in_array($_COOKIE['city'], $cities)) {
$url = $base_url . '/' . $_COOKIE['city'];
header('Location: ' . $url, TRUE, 301);
exit;
}
}
$url = $base_url . '/city1';
setrawcookie('city', rawurlencode('city1'), REQUEST_TIME + 31536000, '/');
header('Location: ' . $url, TRUE, 301);
exit;
}
else {
$request_path_array = explode('/', $request_path);
$select_city = check_plain($request_path_array[0]);
// get city from url at first,if not, get that from cookie.
if (in_array($select_city, $cities)) {
$city = $select_city;
setrawcookie('city', rawurlencode($select_city), REQUEST_TIME + 31536000, '/');
}
else {
if (isset($_COOKIE['city'])) {
$city_from_cookie = $_COOKIE['city'];
if (in_array($city_from_cookie, $cities)) {
$city = $city_from_cookie;
}
else {
$city = 'city1';
}
}
else {
$city = 'city1';
}
}
}
对网站的每个请求都会通过此脚本并设置一个全局变量,该变量用于不同的数据库查询以获取相应的内容。
我想知道是否有更好的方法来实现这一目标。我正在努力解决任何解决方案,因为我正致力于重建整个平台,这是一个关键功能。
请记住,速度和稳定性是主要的KPI。
谢谢,