3

IIS Isapi Rewrite を使用して次のことをしようとしています...

次のように、seo に適した URL を (静かに) アプリケーションに適した URL に変換する必要があります。

RewriteRule ^/seo-friendly-url/ /test/index.cfm [I,L]

十分に単純です。

ただし、検索エンジン (たとえば) で既にインデックス化されている URL を 301 リダイレクトして、seo に適したバージョンにする必要もあります。そのようです:

RewriteRule ^/test/index.cfm    /seo-friendly-url/ [I,R=301]

これらはそれぞれ、単独で正常に機能します。しかし、.ini ファイルに両方を含めると、最終的にブラウザのアドレス バーに /seo-friendly-url/ が表示されますが、404 が表示されます (はい、/test/index.cfm は確実に存在します!)。

循環参照のように見えることはわかっていますが、最初のルールは IIS とアプリケーションの間の URL を書き換えるだけです。リダイレクトがないため、Isapi Rewrite をもう一度実行することはありません。それとも私はそれについて間違っていますか?

Isapi Rewrite でのログ記録を有効にしましたが、次のように表示されます。

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/'

誰でもアイデアはありますか?

4

2 に答える 2

0

ここには2つの異なる書き直しがあり、正しく行えばうまくいくはずです

  1. 最初のものは、クライアントのユーザー エージェントには表示されません。/seo-friendly をリクエストし、内部で書き換えて応答する

  2. 2 つ目は実際には書き換えではなく、リダイレクトです。これをクライアントに送り返すと、クライアントは /seo-friendly を再要求します -- これが行末であることを示すには [R=301,L] を使用する必要があると思います -- ただそれを返します (L はそうします)それ)

于 2009-06-26T12:08:39.290 に答える
0

いくつかの試行錯誤を通じて、私はこれに対する解決策を思いつきました。

$ 記号を使用して、リダイレクトの一致が文字列の末尾にあることを指定します。

RewriteRule ^/test/index.cfm$    /seo-friendly-url/ [I,R=301]

書き換えられた URL をリダイレクトの一致文字列とはまったく異なるものにします - この場合、不要な "?" を追加します:

RewriteRule ^/seo-friendly-url/ /test/index.cfm? [I,L]
于 2009-06-30T09:35:33.957 に答える