0

Webサイトにはasp.net4、c#、およびルーティングを使用しています。

私のルートの結果は次のようになります

A) http://mysite.com/article/58/mytitle   (result my article all is fine)

58テーブルのデータベースのinとColumnをmytitle表します。IdTitleArticles

私はそれに気づきます...私が要求した場合:

http://mysite.com/article/2000000000/mytitle (a not existing ID)

エラーページが表示されます。

代わりに試してみる場合:

B) http://mysite.com/article/58/mytitttttttle (title misspelled)

私はまだ私のページを取得しますhttp://mysite.com/article/58/mytitle

IDとタイトルの両方がデータソースのレコードを表していない場合は、Webサイトを404ページにリダイレクトする必要があります。

PS:質問のIDが一致しない場合、404ページにリダイレクトできることを除けば、SOWebサイトも同様の動作をしていることに気付きました。

私の質問:

  • これは正常な動作ですか?
  • 代わりに404ページにリダイレクトする方法は?
  • 404ページを使用できない場合は、正規URLを使用しますか?

私はこのシナリオに関心があるので尋ねました、ウェブサイトが私のサイトに間違ってリンクしていると想像してみましょう

http://mysite.com/article/58/mytitttttttle (title misspelled)

また

http://mysite.com/article/58/mytitttttttle2222 (title misspelled)

両方とも私の検索エンジンのインデックスになり、重複したコンテンツになります(そしてそれは良くありません)。

可能であれば、コードのサンプルを提供してください。これについてのコメントに感謝します、ありがとう!

4

3 に答える 3

1

これが発生する理由は、検索キーとして数値IDを使用するためです(この場合は、何があっても投稿58を検索します)。

あなたにできることはどちらかです

  • 数値IDを削除し、テキストまたは
  • 投稿を取得し、データベースから引き出したものに基づいて「postslug」が正しいことを確認します。

テキストだけを使用することで、よりクリーンなURLを取得できます。ただし、postslugで高性能のルックアップを行うには、データベースが文字列のインデックスを作成することに依存する必要があります。そして、あなたは重複したナメクジについて心配しなければなりません。

ハイブリッドを使用すると、クリーンURL(追加情報)が少なくなりますが、整数ルックアップのパフォーマンスについてあまり心配する必要はありません。

どちらを選択しても、コントローラーでこの情報を確認してから、Viewを返すか、HttpNotFound()を返します。

于 2011-09-23T14:19:41.763 に答える
1

こんにちは私は最近これを行い、このブログを使用しました。

http://weblogs.asp.net/paxer/archive/2010/05/31/asp-net-http-404-and-seo.aspx

http://searchengineland.com/url-rewriting-custom-error-pages-in-aspnet-20-12234

于 2011-09-23T14:18:03.960 に答える
0

IDとタイトルを渡すのではなく、タイトルを一意の値としてデータベースに保存することをお勧めします。これにより、次のことが可能になります。

http://mysite.com/article/title

タイトルが2つある場合はどうなりますか?それでは、次のように、最後に整数をインクリメントする一意のループが見つかるまでループを作成できます。

http://mysite.com/article/title-2

これは、それらがすべて同じページを指す可能性のあるURLの数が無限であるという問題を回避します(Googleはあなたを嫌います)


または、IDとタイトルの両方を含むURLを保持する場合は、Webフォームでifステートメントを実行して、データベース内の変数に一致するレコードの数を返します。

何かのようなもの:

cmd.CommandText = "SELECT COUNT(*) FROM Table WHERE ID=@ID AND Title=@Title"

if ((int)cmd.executescalar == 0){
   Response.Redirect("404.aspx");
}
于 2011-09-23T14:09:43.353 に答える