CSS 根据浏览器语言重定向用户时出现问题
CSS issue when redirecting user deppending on browser's language
在尝试根据浏览器的语言将用户重定向到同一站点的不同版本时,我遇到了一个愚蠢的问题。
实际上用户似乎被正确重定向到语言站点版本,问题是该站点没有正确加载 CSS 和 JS 文件(我认为这是由于其文件夹结构) ,我不确定如何解决它。
为了执行重定向,我设置了一个名为 'index.php' 的文件,该文件位于根文件夹中,它具有以下 PHP 代码:
<?php
header("Location: " . getLanguage());
function getLanguage(){
$availableLanguages = array('es', 'en');
$defaultLanguage = 'en';
$token = strtok($_SERVER['HTTP_ACCEPT_LANGUAGE'], ",;");
while ($token !== false) {
$language = substr($token, 0, 2);
if (in_array($language, $availableLanguages)) {
return $language;
}
$token = strtok(",;");
}
return $defaultLanguage;
}
?>
如您所见,只有两种语言(英语和西班牙语)。
下一步是放置 2 个不同的文件夹,其中包含各自的 'index.html' 文件:
/es --> 西班牙语 index.html 版本
/en --> 英文 index.html 版本
因此我们可以在服务器上看到以下示例文件夹结构:
- http/img/picture.jpg
- http/js/script.js
- http/css/style.css
- http/en/index.html(网站英文版)
- http/es/index.html(网站的西班牙语版本)
- http/index.php
当用户进入该站点时,php 文件将他重定向到“/en”或“/es”文件夹,具体取决于浏览器语言...然后用户加载 'index.html' 具有以下 HTML 结构的文件:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>my site in english</title>
<link rel='icon' href='img/favicon.png'>
<!--Styles-->
<link href="css/styles.css" type="text/css" rel="stylesheet">
</head>
<body>
<p>this is an example</p>
<!--Styles-->
<script src="js/script.js"></script>
</body>
</html>
如您所见,'index.html' 定义了 css、img 和 js 文件的路径,这些文件位于 'root/css'、'root/img' 和 'root/js' 文件夹,但是网站没有加载它们...我不知道为什么?
您需要将对外部文件的引用调整到 "step up" 目录(例如 ../css/styles.css
)或从根目录开始(例如 /css/styles.css
)。我推荐后者,因为它允许您在目录结构中的任何地方移动而无需更改任何引用。
例如,如果您正在查看英文页面,您所拥有的参考资料正在 http://yourdomain.tld/en/css/styles.css
处查找不存在的文件。
索引文件现在位于 /en 或 /es 中,因此:
<link href="css/styles.css" type="text/css" rel="stylesheet">
应该是:
<link href="../css/styles.css" type="text/css" rel="stylesheet">
注意添加的 ../
返回文件夹。您拥有的 js 和其他资源也是如此。
我建议使用绝对路径,这样你就不会遇到类似的问题:
<link href="/css/styles.css" type="text/css" rel="stylesheet">
注意 URI 开头的 /
。
在尝试根据浏览器的语言将用户重定向到同一站点的不同版本时,我遇到了一个愚蠢的问题。
实际上用户似乎被正确重定向到语言站点版本,问题是该站点没有正确加载 CSS 和 JS 文件(我认为这是由于其文件夹结构) ,我不确定如何解决它。
为了执行重定向,我设置了一个名为 'index.php' 的文件,该文件位于根文件夹中,它具有以下 PHP 代码:
<?php
header("Location: " . getLanguage());
function getLanguage(){
$availableLanguages = array('es', 'en');
$defaultLanguage = 'en';
$token = strtok($_SERVER['HTTP_ACCEPT_LANGUAGE'], ",;");
while ($token !== false) {
$language = substr($token, 0, 2);
if (in_array($language, $availableLanguages)) {
return $language;
}
$token = strtok(",;");
}
return $defaultLanguage;
}
?>
如您所见,只有两种语言(英语和西班牙语)。
下一步是放置 2 个不同的文件夹,其中包含各自的 'index.html' 文件:
/es --> 西班牙语 index.html 版本 /en --> 英文 index.html 版本
因此我们可以在服务器上看到以下示例文件夹结构:
- http/img/picture.jpg
- http/js/script.js
- http/css/style.css
- http/en/index.html(网站英文版)
- http/es/index.html(网站的西班牙语版本)
- http/index.php
当用户进入该站点时,php 文件将他重定向到“/en”或“/es”文件夹,具体取决于浏览器语言...然后用户加载 'index.html' 具有以下 HTML 结构的文件:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>my site in english</title>
<link rel='icon' href='img/favicon.png'>
<!--Styles-->
<link href="css/styles.css" type="text/css" rel="stylesheet">
</head>
<body>
<p>this is an example</p>
<!--Styles-->
<script src="js/script.js"></script>
</body>
</html>
如您所见,'index.html' 定义了 css、img 和 js 文件的路径,这些文件位于 'root/css'、'root/img' 和 'root/js' 文件夹,但是网站没有加载它们...我不知道为什么?
您需要将对外部文件的引用调整到 "step up" 目录(例如 ../css/styles.css
)或从根目录开始(例如 /css/styles.css
)。我推荐后者,因为它允许您在目录结构中的任何地方移动而无需更改任何引用。
例如,如果您正在查看英文页面,您所拥有的参考资料正在 http://yourdomain.tld/en/css/styles.css
处查找不存在的文件。
索引文件现在位于 /en 或 /es 中,因此:
<link href="css/styles.css" type="text/css" rel="stylesheet">
应该是:
<link href="../css/styles.css" type="text/css" rel="stylesheet">
注意添加的 ../
返回文件夹。您拥有的 js 和其他资源也是如此。
我建议使用绝对路径,这样你就不会遇到类似的问题:
<link href="/css/styles.css" type="text/css" rel="stylesheet">
注意 URI 开头的 /
。