多语言子域。如何实施?

发布于 2024-11-01 15:35:43 字数 399 浏览 1 评论 0原文

我有一个要求,当用户更改英语以外的语言时,它需要作为子域显示在 URL 中。示例:

英文网站 = www.abc.com
西班牙语网站(美国西班牙语)= esp-us.abc.com
西班牙语网站(Spanish spanish)= esp-es.abc.com

如何实现这个?我正在使用代码点火器 php。我有一个名为 L_languages 的表,它是语言查找表。它有两列:一列用于语言代码 (esp),另一列用于国家/地区代码 (us),因此我可以根据用户的语言从数据库中提取该代码。

但是如何将其写入子域并使该过程完全由数据库驱动,以便明天如果我添加一种新语言子域将起作用?

  • 站点在 CentOS 上运行 Apache。

谢谢。

I have a requirement that is when the user changes the language except English it needs to show up in the URL as a sub-domain. Example:

English site = www.abc.com
Spanish site (US spanish) = esp-us.abc.com
Spanish site (Spanish spanish) = esp-es.abc.com

How to implement this? I am using code ignitor php. I have a table called L_languages which is the language lookup table. It has two columns: one for the language code (esp) and another column for the country code (us) so I can pull this from the database according to the user's language.

But how to write it to the sub-domain and make this process fully database driven so tomorrow if I add a new language the subdomain will work?

  • Site is running Apache on CentOS.

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

鲸落 2024-11-08 15:35:43

您可以让 HTACCESS 执行 mod_rewrite 规则来识别这些实例,或者您可以在 HTACCESS 中应用一揽子规则,然后让 PHP 执行繁重的工作。或者两者的结合。

HTACCESS mod_rewrite 解决

RewriteEngine On
RewriteCond %{HTTP_HOST} !^(www.)?abc.com$ [NC]
RewriteCond %{HTTP_HOST} ^(.+).abc.com$
RewriteRule ^(.*)$ $1?lang=%1 [QSA,L]

方案 使用此规则的示例:

No Change - These are assumed as the Base
http://www.abc.com
  ==> http://www.abc.com
http://abc.com
  ==> http://abc.com
Language Coded Subdomains
http://de.abc.com
  ==> http://de.abc.com/?lang=de
http://esp-es.abc.com
  ==> http://esp-es.abc.com/?lang=esp-es
Language Coded Subdomains with filename & query
http://esp-us.abc.com/filename.htm
  ==> http://esp.us.abc.com/filename.htm?lang=esp-us
http://fr.abc.com/filename.htm?name=value
  ==> http://fr.abc.com/filename.htm?lang=fr&name=value

PHP 解决方案

将此代码包含在页面顶部的某个位置(在生成特定于语言的内容之前)。

<?php
$lang = false;
if( preg_match( '/^(.+)\.abc.com$/' , $_SERVER['HTTP_HOST'] , $matches )
    && count( $matches )==2
    && $matches[1]!='www' ){
  $lang = $matches[1];
}

然后,您可以使用 $lang 变量(如果 A)没有子域,或 B)使用“www”子域,则该变量将为 false
此外,您可以根据可接受的语言数组检查 $lang 变量的值,如果不存在,则再次将其重置为 false。

You can have HTACCESS perform a mod_rewrite rule identify these instances, or you can apply a blanket rule within HTACCESS and then have PHP do the heavy lifting from there. Or a combination of the two.

HTACCESS mod_rewrite Solution

RewriteEngine On
RewriteCond %{HTTP_HOST} !^(www.)?abc.com$ [NC]
RewriteCond %{HTTP_HOST} ^(.+).abc.com$
RewriteRule ^(.*)$ $1?lang=%1 [QSA,L]

Examples using this rule:

No Change - These are assumed as the Base
http://www.abc.com
  ==> http://www.abc.com
http://abc.com
  ==> http://abc.com
Language Coded Subdomains
http://de.abc.com
  ==> http://de.abc.com/?lang=de
http://esp-es.abc.com
  ==> http://esp-es.abc.com/?lang=esp-es
Language Coded Subdomains with filename & query
http://esp-us.abc.com/filename.htm
  ==> http://esp.us.abc.com/filename.htm?lang=esp-us
http://fr.abc.com/filename.htm?name=value
  ==> http://fr.abc.com/filename.htm?lang=fr&name=value

PHP Solution

Include this code somewhere towards the top of the page (before language-specific content is generated).

<?php
$lang = false;
if( preg_match( '/^(.+)\.abc.com$/' , $_SERVER['HTTP_HOST'] , $matches )
    && count( $matches )==2
    && $matches[1]!='www' ){
  $lang = $matches[1];
}

You can then use the $lang variable (which will be false if either A) no subdomain, or B) the "www" subdomain is used.
Additionally, you can check the value of the $lang variable against an array of acceptable languages, and, if it is not present, again, reset it to false.

最舍不得你 2024-11-08 15:35:43

您可以使用 PHP 来服务不同的语言,但如果您希望这些子域正常工作,则需要配置您的网络服务器(Apache、IIS 等)来设置这些子域。您需要将您选择的网络服务器添加到您的问题中。 :)

You can use PHP to serve different languages, but if you want those subdomains to work, you'll need to configure your webserver (Apache,IIS, etc.) to setup those subdomains. You'll want to add your webserver of choice to your question. :)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文