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]
几乎可以工作,但由于某种原因后的价值?仍然会被追加。
答案 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 ,第三个捕获组捕获密钥值。