2012-03-19 19 views
3

Facebook共有をサポートする必要があるMVC JavaScriptアプリケーションがあります。つまり、独自のOGメタHTMLタグをサポートする必要があります。Nginx:URLリライトでエスケープする#

Facebookのクローラを検出してそのセクションの適切なOGタグを使ってアプリケーションのカスタムバージョンをサーバーに送信するNginxのリライトを行っていますが、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のパス部分の一部であるとのリンクが含まれている場合、それはされてxx%xxの通常のURLのエスケープをエスケープする必要がありますそのチャプターの16進数は#の場合%23です。

+0

Moritz:上記のように、私は正常にproxy_passingしています: 'rewrite ^(。*)$ /og.php?url = http:// $ host $ uri;'キャラクター)。私はNginxやApacheのどちらもハッシュを見ていないが、正しく書き直されていることを理解しています。次のものが必要です: 'rewrite ^(。*)$ /og.php?url=escape(http:// $ host $ uri);' –

+0

もちろん、GETパラメータに変換するとURLをエスケープする必要があります。それを考えなかった。あなたは#についての質問でしたが、私の答えはまだ適用されています。 –

+0

はい、私の問題は、上記のエスケープな言葉がNginxには私の知る限り存在していないということです。 –