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?

È stato utile?

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

  1. Il primo non viene mai visto dall'agente utente client. Richiede / seo-friendly e lo riscrivi internamente e rispondi

  2. 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)

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