如何在静态页面上利用facebook本地化

时间:2016-01-22 21:04:22

标签: facebook .htaccess facebook-opengraph

Facebook希望您使用og:locale:alternate元标记声明您的网站可以使用哪种语言。如果他们想要使用替代本地标记&fb_locale=es_ES,请不要在标记中加注。到URL的末尾(或者他们想要的语言代码)。我的问题是我的网站是静态的,所以我无法轻易阅读这些额外的信息,所以如果在.htaccess文件中有一种方法来重新映射网址的话。

所以 (.*)(?|&)fb_locale=(.*)[first 2 letters of $3]/[everything but first 2 letters of $1]

所以

en/test.html?fb_locale=es_ES

应该去

es/test.html

RewriteCond %{THE_REQUEST} /([^/]+)/(.*)[\?&]fb_locale=([^_]+)_(.*) [NC]
RewriteRule ^ /%3/%2 [NC,L,R]

几乎可以工作,但由于某种原因后的价值?仍然会被追加。

2 个答案:

答案 0 :(得分:0)

您可以在root / .htaccess中使用以下代码:

RewriteEngine On

#if the requested url is /en/test.html?fb_locale=foo_bar
RewriteCond %{THE_REQUEST} /en/test\.html\?fb_locale=([^_]+)_[^\s]+ [NC]
#Then redirect the request to /es/test.html?fb_locale=foo
RewriteRule ^ /es/test.html?fb_locale=%1 [NC,L,R]

答案 1 :(得分:0)

尝试:

RewriteCond %{THE_REQUEST} /([^/]+)/([^?&]+)[\?&]fb_locale=([^_]+)_([^\s]+) [NC]
RewriteRule ^ /%3/%2? [NC,L,R]

最后的空问号非常重要,因为它会丢弃原始查询字符串。

在THE_REQUEST RewriteCond的最后一个捕获组([^ \ s] +)中,我们排除匹配的空格\并告诉正则表达式匹配有限的字符,因为正则表达式是贪婪的并且它尝试捕获请求字符串 spaceHTTP / 1.1 的整个剩余部分。

以下是The_Request字符串的示例:

GET /en/index.html?q=foo HTTP/1.1

正确的正则表达式模式没有捕获组来匹配它:

/en/index\.html\?q=foo

带正则表达式捕获组的模式:

/([^/]+)/([^?]+)\?q=([^\s]+)

第一个捕获组捕获 / en ,第二个捕获组捕获 /index.html ,第三个捕获组捕获密钥值。