2016-01-22 3 views
0

Facebook хочет, чтобы вы использовали метатег og:locale:alternate, чтобы объявить, на каких языках доступен ваш сайт. Непринужденно вместо того, чтобы иметь рефрен в теге, когда они хотят использовать альтернативный локальный, нажмите &fb_locale=es_ES до конца URL-адреса (или того, что он хочет). Моя проблема заключается в том, что мой сайт является статическим, поэтому я не могу легко прочитать эту дополнительную информацию, так что было неудобно, если бы в файле .htaccess был способ переназначить URL-адрес.Как использовать локализацию facebook на статической странице

так (.*)(?|&)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

Try:

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

Пустой знак вопроса в конце концов, это важно, так как она отбрасывает Orignal строки запроса.

В последней группе захвата ([^ \ s] +) в 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, а третья группа захвата фиксирует значение ключа.

+1

. Чтобы сделать это еще точнее, я ограничил первую группу захвата двумя буквами. 'RewriteCond% {THE_REQUEST} /([^/]+){2}/(.*)[\?&]fb_locale=([^_]+)_([^\s]+) [NC]' и установить перенаправление на постоянный 'RewriteRule^/% 3 /% 2? [NC, L, R = 301] ' –

+0

@matthewCornelisse Ваша первая группа захвата по-прежнему захватывает один или несколько символов, исключая /, правильный синтакс равен ** ([^ /] {2}) ** – starkeen

0

Вы можете использовать следующий код в корневой/.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] 
+0

это не работает, но это заставило меня задуматься. См. Код, который я добавил в нижней части вопроса. Почти работает, но по какой-то причине он сохраняет fb_locale .. вызывает бесконечный цикл –