Domanda

La mia app da pallone sta facendo un reindirizzamento di 301 per uno degli URL.

La traceback nella nuova reliquia è:

Traceback (most recent call last):
  File "/var/www/app/env/local/lib/python2.7/site-packages/flask/app.py", line 1358, in full_dispatch_request
    rv = self.dispatch_request()
  File "/var/www/app/env/local/lib/python2.7/site-packages/flask/app.py", line 1336, in dispatch_request
    self.raise_routing_exception(req)
  File "/var/www/app/env/local/lib/python2.7/site-packages/flask/app.py", line 1319, in raise_routing_exception
    raise request.routing_exception
RequestRedirect: 301: Moved Permanently
.

Non sembra che stia anche colpire il mio codice o piuttosto che la traceback non mostra nessuno dei miei file in esso.A un certo punto ho avuto Nginx reindirizzare tutta la richiesta non SSL a HTTPS, ma doveva disabilitare che, poiché la vernice non è stata in grado di effettuare la richiesta di port 443 con un errore ... Probabilmente una configurazione che ho fatto o non ha fatto.

Non restituisce sempre un 301 però, posso richiedere l'URL e ottenerlo senza problemi.Ma qualcuno fuori nel mondo che richiede l'URL sta ricevendo una risposta 301.

È una richiesta GET con alcuni intestazioni personalizzate per collegarlo all'account.

A nessun punto nel mio codice c'è un reindirizzamento di 301.

È stato utile?

Soluzione

La traceback mostra che è stata la corrispondenza del percorso che ha sollevato un reindirizzamento; di solito (ad esempio a meno che non si aggiungano rotte di reindirizzamento esplicita), ciò significa che il client ha provato ad accedere a filiale URL (uno che termina con A SLASH SLASH ), ma l'URL richiesto non includeva l'ultima barra. Il cliente è semplicemente stato reindirizzato all'URL Canonical Branch con la barra.

Dal Werkzeug Rule Documentazione :

.

Regole dell'URL che terminano con una barra sono gli URL dei filiali, altri sono foglie. Se hai abilitato strict_slashes (che è il valore predefinito), tutti gli URL delle filiali corrispondenti senza una barra finale si attivano un reindirizzamento allo stesso URL con la slitta mancante aggiunta.

Dal documentazione di routing :

.

Le regole dell'URL di Flask si basano sul modulo di routing di Werkzeug. L'idea dietro a quel modulo è garantire gli URL belli e univoci in base ai precedenti stabiliti da Apache e precedenti server HTTP.

Prendi queste due regole:

@app.route('/projects/')
def projects():
    return 'The project page'

@app.route('/about')
def about():
    return 'The about page'
.

Sebbene siano piuttosto simili, differiscono nel loro uso della barra finale nella definizione dell'URL. Nel primo caso, l'URL canonico per i progetti Endpoint ha una barra finale. In questo senso, è simile a una cartella su un file system. Accedendolo senza una barra finale causerà il reindirizzamento del pallone all'URL canonico con la barra finale.

Nel secondo caso, tuttavia, l'URL è definito senza una barra finale, piuttosto come il percorso di un file su sistemi simili a Unix. L'accesso all'URL con una barra finale produrrà un errore 404 "non trovato".

Questo comportamento consente agli URL relativi di continuare a lavorare anche se la barra finale è rimpiazzata, coerente con il modo in cui Apache e altri server funzionano. Inoltre, gli URL rimarranno unici, che aiutano i motori di ricerca a evitare di indicizzare la stessa pagina due volte.

Come documentato, se fai non desidera questo comportamento (e ha l'URL senza la barra finale è un 404 non trovato invece), è necessario impostare l'opzione strict_slashes=False sul tuo percorso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top