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