我有一个要求,即当用户更改除英语之外的语言时,它需要在URL中显示为子域。例如:
英文网站= www.abc.com
西班牙语网站(美国西班牙语)= esp-us.abc.com
西班牙语网站(西班牙语西班牙语)= esp-es.abc.com
如何实现?我正在使用代码点火器php。我有一个名为L_languages
的表,它是语言查找表。它有两列:一列用于语言代码(esp),另一列用于国家代码(us),因此我可以根据用户的语言从数据库中提取它。
但是如何将它写入子域并使这个过程完全由数据库驱动,所以明天如果我添加一个新的语言子域将起作用?
感谢。
答案 0 :(得分:3)
您可以让HTACCESS执行mod_rewrite
规则来识别这些实例,或者您可以在HTACCESS中应用一揽子规则,然后让PHP从中完成繁重的工作。或者是两者的结合。
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
$lang = false;
if( preg_match( '/^(.+)\.abc.com$/' , $_SERVER['HTTP_HOST'] , $matches )
&& count( $matches )==2
&& $matches[1]!='www' ){
$lang = $matches[1];
}
然后,您可以使用$lang
变量(如果A)没有子域,则为false
,或者B)使用“www”子域。
此外,您可以针对可接受语言数组检查$lang
变量的值,如果不存在,则再次将其重置为false。
答案 1 :(得分:0)
您可以使用PHP来提供不同的语言,但如果您希望这些子域工作,则需要配置您的网络服务器(Apache,IIS等)来设置这些子域。您需要将自己选择的网络服务器添加到您的问题中。 :)