Ich habe eine Single Page Application ohne serverseitiges Rendering. Wenn also jemand eine URL von der Site auf Facebook oder Twitter teilt, wird der dynamische Titel der Seite nicht angezeigt.
Ich möchte Crawler-/Bot-Anfragen an ein spezielles Backend senden, das eine Seite mit OpenGraph-Meta-Tags bereitstellt.
Das Front-End wird auf NGINX gehostet und ich habe bisher diese Konfiguration:
server {
listen 80;
listen [::]:80;
location / {
if ($http_user_agent ~* "linkedinbot|googlebot|yahoo|bingbot|baiduspider|yandex|yeti|yodaobot|gigabot|ia_archiver|facebookexternalhit|twitterbot|developers\.google\.com") {
return 307 https://renderer_service_domain$request_uri;
}
root /usr/share/nginx/html;
index index.html;
}
Das funktioniert, aber die URL von Angular hat das # vor der Routen-URL. Ich muss es entfernen, bevor ich die Anfrage an das spezielle Backend sende.
Also, wie kann ich den Hash aus $request_uri entfernen?
Ich habe versucht, einige Beispiele umzuschreiben, aber es sendet die Anforderung an dieselbe Domäne. Ich muss die Anforderung an einen anderen Server/Domänennamen senden.
Antwort1
Der Hash #
und der nachfolgende Inhalt werden nicht an den HTTP-Server gesendet und sind daher nicht Teil der $request_uri
Variable.
Welche genaue Anfrage erhält Ihr Backend in Ihrer Beispielkonfiguration?
Ich habe zwar keine Erfahrung mit Single Page Apps und Google, halte es aber nicht für einen guten Ansatz, an Crawler-Bots andere Inhalte zu senden als an Endbenutzer.