2015-03-16 6 views
12

Abbiamo una SPA angolare che utilizza nodo, nginx e prerender.io. La nostra home page è impostata come un URL univoco (ad esempio www.foo.com/bar) e nel nostro routing, questa home page acquisisce il reindirizzamento predefinito di tutti gli URL relativi alla radice non specificatamente indirizzati diversamente.nginx/angular/node.js URL root con prerender.io

Il nostro problema è questo: l'url radice www.foo.com o www.foo.com/ ritorna con una pagina vuota raschia per google e Facebook. Il nostro indice è un modello base di ng-include che tutte le pagine sono inserite all'interno, quindi ha senso che il nostro URL di root ritorni senza alcun contenuto di corpo html reale. HTML principale nell'indice:

<div class="st-content"> 
    <div ng-view="" class="main-content" id="mainView"></div> 
    <div ng-include="'/views/footer.html'"></div> 
</div> 

Inoltre, abbiamo cercato altre soluzioni senza risultati positivi:

  • tag base nella testa dell'indice collegamento a '/', che non rompere nulla ... è anche fatto non risolverlo
  • 307 reindirizzamento, non ha prodotto risultati
  • configs nginx guardare bene

Nota: per iscritto a questa domanda mi venne in mente di cambiare il percorso a casa per ‘/ ':

.when('/', { 
    templateUrl: '/views/foo-bar.html', 
    title: ‘Foo Bar', 
    pageDescription: ‘Lorem Ipsum Foo Bar' 
}) 
    . 
    . 
    . 
.otherwise({ 
    redirectTo: '/' 
}); 

Se cambiato a questo sarà il graffio della Casa ancora così vuoto? Non è fondamentalmente lo stesso problema di redirect js, ma con meno caratteri?

+0

non ho avuto se nginx è configurato per rispondere con il ' index.html' per tutte le richieste su 'foo.com' o' www.foo.com'. È? A proposito, stai usando la modalità HTML5? –

+2

Puoi inviarmi l'URL in questione? Sarei felice di testarlo e vedere cosa sta succedendo lì per assicurarsi che tutto sia impostato correttamente. [email protected] –

+0

@DanM. Nginx è configurato per il reindirizzamento 301 per tutte le richieste su foo.com. www.foo.com viene quindi inviato a node.js. Strace-ing nginx e node mostrano che nginx è appropriatamente proxy al server nodo, a quel punto vediamo le richieste e le risposte del nodo. Inoltre, stiamo usando la modalità HTML5. –

risposta

0

È necessario impostare la variabile window.prerenderReady. Così, mettere questo nel controller percorso:

window.prerenderReady = false; 

... e questo in funzione di callback il successo del vostro controller:

window.prerenderReady = true;