2012-03-19 4 views
3

У меня есть приложение JavaScript MVC, которое должно поддерживать обмен Facebook, а это значит, что ему необходимо поддерживать уникальные метатеги HTML OG.Nginx: Escaping # in url rewrite

Я делаю переписывание Nginx, которое обнаружит сканер Facebook, чтобы создать пользовательскую версию приложения с соответствующим тегом OG для этого раздела, но Apache игнорирует все после знака # (поскольку серверная сторона должна делать с тех пор это функция браузера) Я хотел бы избежать «#» в моем переписывания, но я не знаю, как это сделать в Nginx:.

location/{ 
    if ($http_user_agent ~* 'facebookexternalhit') { 
    rewrite ^(.*)$ /og.php?url=http://$host$uri; 
    proxy_pass http://127.0.0.1:8080; 
    break; 
    } 
    root /var/www/html/site.net; 
} 

Спасибо за взглянуть!

ответ

1

Вы не можете или не должны. Если у вас есть URL-адрес в вашем браузере, например http://www.example.tld/site.html#anchor, запрос вашего браузера будет состоять только из не-якорной части: http://www.example.tld/site.html. После получения содержимого браузер будет искать именованный якорь с именем anchor и прокрутить страницу, чтобы ее содержимое было видно.

Значение nginx никогда не увидит персонажа #.

Если, с другой стороны, веб-сайт содержит ссылку с # будучи частью пути части URL (и это довольно редко), то он должен быть экранирован с обычной URL спасаясь от %xx с xx существами шестнадцатеричное число этого chacter - %23 в случае #.

+0

Мориц: Я успешно прокси-пароль для Apache, как написано выше: 'rewrite^(. *) $ /og.php? Url = http: // $ host $ uri;', который отлично работает (включая хэш персонаж). Я понимаю, что ни Nginx, ни Apache не видят хеш, но он правильно переписывается, мне просто нужно следующее: 'rewrite^(. *) $ /og.php?url=escape (http: // $ host $ uri);' –

+0

Вы правы, конечно, что избегать URL-адреса, если он был включен в параметр GET. Не думал об этом. У вас вопрос был о #, хотя, и для этого мой ответ по-прежнему применяется. –

+0

Да, но моя проблема в том, что вышеперечисленное слово выше не существует в Nginx, насколько я знаю. –