Nginx: Escapeing # в переписывании URL - PullRequest
3 голосов
/ 20 марта 2012

У меня есть JavaScript-приложение MVC, которое должно поддерживать общий доступ к Facebook, что означает необходимость поддержки уникальных метатег-тегов OG.

Я делаю перезапись 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 Ответ

1 голос
/ 21 марта 2012

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

То есть nginx никогда не увидит символ #.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...