没有mod_geoip的.htaccess地理定位

时间:2011-03-26 12:34:27

标签: .htaccess geolocation

我正在试图找出一种方法来执行以下操作:

在所有.htaccess rewrited-urls中加入“lang token”,如下所示:

RewriteRule ^/?$     _main_htaccess_handler?mod=homepage&lang=[LANG_STRING]
RewriteRule ^disclaimer\.htm?$     _main_htaccess_handler?mod=disclaimer&lang=[LANG_STRING]

......等等,对于所有网址

所有国家/地区除意大利外:

[LANG_STRING] ='EN';

国家意大利

[LANG_STRING] ='IT';

现在,搜索完成此操作的方法,我找到了这个脚本:

http://ipinfodb.com/country_query.php?country=IT&output=htaccess_allow

这将输出分配给某个国家/地区的IP列表,准确率为99.5%。

我想将这些IP子网字符串“链接”到上面提到的.htaccess类型的方法。

无论如何,在没有mod_geoip的情况下,我对.htaccess的地理定位感到有点困惑。

您认为上面提到的“创建”解决方案能否正常运行?然后,搜索引擎呢?例如,谷歌意大利会正确地找到意大利语的页面吗? (这个问题适用于所有搜索引擎)

非常感谢

2 个答案:

答案 0 :(得分:0)

拥有一个巨大的.htaccess文件绝不是一个好主意,因为在每次请求给定网站之前解析文件,导致性能下降。

答案 1 :(得分:0)

在尝试了一些技巧后,我选择了混合技术:PHP + htaccess

我正在为那些将会涉及这个问题的人写作。

HTACCESS CONFIGURATION:

RewriteRule    ^/?$    _builder.php?mod=language-redirect    [L,QSA]
RewriteRule    ^en/?$     _builder.php?mod=homepage&lang=en  [L,QSA]
RewriteRule    ^it/?$     _builder.php?mod=homepage&lang=it    [L,QSA]

_builder.php代码(相对于意大利语和英语,可轻松转换以满足您的需求)

if ( ! isset ( $_GET['lang'] ) || ( $_GET['lang'] != 'en' && $_GET['lang'] != 'it' ) ) {
    // reaches here when someone accesses the / of the site. This piece of code outputs the correct geolocation language. If needed, you can also place an header redirect to the correct language-based homepage instead of defining the language
    $geoplugin = new geoPlugin();
    if ( $geoplugin -> countryCode == 'IT' ) define ( 'LANGUAGE', 'it' );
    else define ( 'LANGUAGE', 'en' );
}
else {
    if ( $_GET['lang'] == 'it' ) define ( 'LANGUAGE', 'it' );
    else define ( 'LANGUAGE', 'en' );
}

最后,可以通过Google“PHP geoplugin”或此网址访问 geoPlugin类http://www.geoplugin.com/webservices/php

请记住将语言设置器片段放入主构建器中,这样脚本就可以知道页面上输出的语言,即使htaccess未传递该语言。