作为先决条件,我假设您没有使用框架/库。此外,我从来没有只使用 .htaccess (作为您的问题请求的标题)解决过类似的问题,因此不知道是否可以这样做。不过,以下指南可能会对您有所帮助。
您的第一个问题
一般来说,网页的文件名和路径会影响其排名。此外,使用母语的页面名称和路径可能会帮助您的用户记住您最重要的 URL,即使没有为它们添加书签。
尽管如此,我绝不会翻译属于网络应用程序的页面的页面名称或目录(相对于信息或促销 em> 页)。
您提到的登录页面就是一个很好的例子。我几乎可以肯定,您不希望您的网站因其登录页面上的内容而被发现。实际上,有很多网站根本不收录登录页面和其他应用程序页面。
相反,在 SEO 方面,将您的精力投入到您的促销和信息页面中。提供有价值的内容,解释您或您的网站的特别之处,并尽一切可能使这些页面正确编入索引。恕我直言,静态 HTML 页面是这样做的最佳选择。
此外,如果您翻译属于您的实际应用程序的页面名称,您将遇到很大的麻烦。例如,成功登录后,您的应用程序可能会将用户转移到他的个人仪表板,该仪表板可能基于另一个 HTML 模板/页面。如果您已将该页面名称翻译成不同的语言,那么您的应用程序将必须注意将用户带到正确的版本。基本上,这意味着您需要的应用程序版本与您想要支持的语言一样多。当然,有一些技巧可以让生活更轻松,但这将是一个持续的痛苦,绝对不值得付出努力。
总结:创建显示您的 USP(独特卖家位置)的静态页面,并向用户提供有价值的内容(例如复杂的教程等)。翻译这些页面,包括名称和路径,并以各种方式对它们进行 SEO。但是对于实际应用来说,优化它的页面是没有意义的,甚至会适得其反。
你的第二个问题
出于多种原因,我永远不会使用基于 IP 的重定向。
首先,有很多客户在他们的祖国以外的国家。例如,您是否真的要将所有以英语为母语的人重定向到您的匈牙利语页面,因为他们目前正在匈牙利出差?
其次,如今越来越多的用户出于不同的原因使用 VPN,因此经常隐藏他们当前所在的国家/地区。
第三,哪个IP地址属于哪个提供商或国家是高度易变的;您将不得不不断更新您的数据库以跟上。
还有更多的原因,但我想你已经明白了。
幸运的是,您的问题有一个解决方案(但请参阅下面的“最后说明”):每个浏览器在从服务器获取页面时,都会告诉服务器首选和接受的语言。例如,Apache 可以直接在RewriteRule 语句中使用该信息并将用户重定向到正确的页面。
如果您无法更改服务器的配置,那么您可以在 CGI 程序中评估相应的标头。
在进行研究时,请查找 Accept-Language HTTP 1.1 标头。一个好的起点可能是here。
你的第三个问题
您最终在第三个问题中混淆了两种不同的东西。语言环境与语言不同。一方面,您在问“...to get local from...”,另一方面,您说“...lang=fr...”,从而给人留下想要获得的印象语言。
如果您想获取语言:请参阅我对第二个问题的回答,或从当前路径解析语言(正如您已经建议的那样)。
如果你想获得语言环境,事情就更复杂了。唯一合理的自动方法是从语言中派生语言环境,但这通常会失败。例如,在进行研究时,我通常更喜欢英语,但另一方面,我位于德国,因此希望日期和时间采用我习惯的格式,因此从我的首选语言派生所需的语言环境将失败.
不幸的是,没有 HTTP 标头可以告诉服务器用户喜欢哪个区域设置。作为起点,this article 可能会对您有所帮助。
关于如何解决这个问题,请参阅最后的评论(下一节)。
最后的评论
正如上面链接的文章已经指出:满足用户的唯一可靠方法是让他在您的应用程序中选择他的语言、区域设置和时区。您可以将用户的选择存储在 cookie 或后端数据库中;各有优缺点。
我通常在我的项目中使用所有方法(HTTP 标头、cookie、数据库)的组合。