Isapi Rewrite 301 redirect resolve como 404 - referência circular?
-
20-08-2019 - |
Pergunta
Eu estou tentando usar o Isapi do IIS Reescrever para fazer o seguinte...
Eu preciso de seo-friendly URLs (silenciosamente) convertidos de volta para a aplicação URLs amigáveis assim:
RewriteRule ^/seo-friendly-url/ /test/index.cfm [I,L]
Bastante simples.
Mas eu também precisam de URLs já indexado em mecanismos de busca (por exemplo) para ser 301 redirecionado para o seo-friendly versão.Assim:
RewriteRule ^/test/index.cfm /seo-friendly-url/ [I,R=301]
Cada uma destas obras de multa no isolamento.Mas quando eu tenho na minha .arquivo ini eu acabar com /seo-friendly-url/ mostrando na minha barra de endereço do browser, mas eu estou sendo servido um 404.(Sim /teste/index.cfm definitivamente não existe!)
Eu sei que parece uma referência circular, mas a primeira regra apenas reescreve a URL entre o IIS e o pedido, não há de redirecionamento, então eu não estou acertando Isapi Rewrite uma segunda vez.Ou estou errado sobre o que?
Eu activado o registo no Isapi Rewrite e eu estou vendo a seguinte:
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/'
Alguém tem alguma idéia?
Solução 2
Através de um pouco de tentativa e erro que eu vim acima com uma solução para isso.
Especificar que o redirecionamento de correspondência é no final da seqüência de caracteres usando o símbolo$:
RewriteRule ^/test/index.cfm$ /seo-friendly-url/ [I,R=301]
Fazer a reescrita de URL trivialmente diferente do redirecionar cadeia de correspondência - neste caso, a adição de um desnecessário "?":
RewriteRule ^/seo-friendly-url/ /test/index.cfm? [I,L]
Outras dicas
Você tem duas diferentes reescreve aqui e ele deve funcionar se você fizer isso direito
A primeira nunca é visto pelo cliente do agente de usuário.Pedidos /seo-friendly e reescrevê-lo internamente e responder
A segunda opção não é realmente uma reescrita, mas um redirecionamento.Enviar de volta para o cliente e ele re-pedidos o /seo-friendly -- eu acho que você precisa usar [R=301,L] para dizer que este é o fim da linha -- basta retornar (L faz isso)