Isapi Rewrite 301 il reindirizzamento si risolve come 404 - riferimento circolare?
-
20-08-2019 - |
Domanda
Sto cercando di usare IIS Isapi Rewrite per fare quanto segue ...
Ho bisogno che gli URL seo-friendly siano convertiti (silenziosamente) in URL compatibili con l'applicazione in questo modo:
RewriteRule ^/seo-friendly-url/ /test/index.cfm [I,L]
Abbastanza semplice.
Ma ho anche bisogno che gli URL già indicizzati nei motori di ricerca (ad esempio) siano reindirizzati 301 alla versione seo-friendly. In questo modo:
RewriteRule ^/test/index.cfm /seo-friendly-url/ [I,R=301]
Ognuno di questi funziona perfettamente in isolamento. Ma quando ho entrambi nel mio file .ini finisco con / seo-friendly-url / mostrando nella barra degli indirizzi del mio browser ma mi viene offerto un 404. (Sì, /test/index.cfm esiste sicuramente!)
So che sembra un riferimento circolare, ma la prima regola riscrive solo l'URL tra IIS e l'applicazione - non c'è reindirizzamento, quindi non sto colpendo Isapi Rewrite una seconda volta. O mi sbaglio a riguardo?
Ho abilitato l'accesso su Isapi Rewrite e vedo quanto segue:
HttpFilterProc SF_NOTIFY_PREPROC_HEADERS
DoRewrites
New Url: '/seo-friendly-url/'
ApplyRules (depth=0)
Rule 1 : 1
Result (length 15): /test/index.cfm
ApplyRules (depth=1)
Rule 1 : -1
Rule 2 : 1
Result (length 18): /seo-friendly-url/
ApplyRules: returning 301
ApplyRules: returning 1
Rewrite Url to: '/seo-friendly-url/'
Qualcuno ha qualche idea?
Soluzione 2
Attraverso alcune prove ed errori ho trovato una soluzione per questo.
Specifica che la corrispondenza di reindirizzamento si trova alla fine della stringa usando il simbolo $:
RewriteRule ^/test/index.cfm$ /seo-friendly-url/ [I,R=301]
Rendi l'URL riscritto banalmente diverso dalla stringa di corrispondenza di reindirizzamento - in questo caso aggiungendo un "? " ;:
RewriteRule ^/seo-friendly-url/ /test/index.cfm? [I,L]
Altri suggerimenti
Hai due riscritture diverse qui e dovrebbe funzionare se lo fai nel modo giusto
-
Il primo non viene mai visto dall'agente utente client. Richiede / seo-friendly e lo riscrivi internamente e rispondi
-
Il secondo non è in realtà una riscrittura, ma un reindirizzamento. Lo rispedisci al client e richiede nuovamente / seo-friendly - Penso che devi usare [R = 301, L] per dire che questa è la fine della riga - semplicemente restituiscilo (L fa che)