8

私はURLルーティングに関する多くの議論と多くの素晴らしい提案を見てきました...しかし現実の世界では、私が議論されていないことの1つは次のとおりです。

  1. スペースと不正な文字を使用したわかりやすいURLの作成
  2. DBのクエリ

カテゴリとオプションのサブカテゴリを持つ記事がある医療サイトを構築しているとします。(1対多)。(どんな例でも使用できますが、医療分野には長い言葉がたくさんあります


カテゴリ/サブ/記事の構造の例:

  1. あなたの一般的な健康(カテゴリー)
    • ナチュラルヘルス(サブカテゴリー)
      1. あなたの体の免疫システムとそれが助けを必要とする理由。(記事)
      2. 植物やハーブは本当に解決策ですか?
      3. 栄養強化食品を食べるべきですか?
    • ホメオパシー医学
      1. ホメオパシー医学とは何ですか?
    • 健康的な食事
      1. あなたは一日に10杯のコーヒーを飲むべきですか?
      2. 有機野菜はそれだけの価値がありますか?
      3. バーガーキング®は悪ですか?
      4. 「フレンチカフェ」とかアメリカンコーヒーの方がヘルシーですか?
  2. 病気と状態(カテゴリー)
    • 自己免疫疾患(サブカテゴリー)
      1. 人々の一番の殺人者はいくつかの病気です
      2. ヘルプを取得する方法
    • 遺伝的条件
      1. 妊娠前の二分脊椎の予防。
      2. あなたは長生きする傾向がありますか?
  3. Dr. FooBarの個人的な提案(カテゴリー)
    1. 漢方薬と自然療法についての私の考え(記事-サブカテゴリなし)
    2. なぜあなたはあなたの健康を気にする必要がありますか?
    3. 正しく食べて、良い食事をすることは可能です。
    4. 無輸血手術は成人しましたか?

このような構造では、次のようにすると、いくつかのLOOONGURLが作成されます。/{Category}/ {subcategory} / {Article Title}

さらに、#のような多くの違法な文字があります!?'é"など

したがって、質問は次のとおりです。

  1. 違法な文字やスペースをどのように処理しますか?(長所と短所?)
  2. データベースからこれを取得することを処理しますか
    • 言い換えると、DBがアイテムを見つけてタイトルを渡すことを信頼しますか、それともすべてのタイトルをプルしてコード内のキーを見つけ、データベースに渡すキーを取得しますか(データベースへの2回の呼び出し)?

注:/ products / beverages /Short-Product-Name/のような素敵な例を常に目にします。醜い例を処理するのはどうですか^_^

4

11 に答える 11

4

私の最後のアプローチは次のとおりです。

  1. すべての「奇妙な文字」を「通常の文字」に変換 -> à を a、ñ を n など
  2. 単語以外のすべての文字を _ に変換します (つまり、a-zA-Z0-9 ではありません)。
  3. アンダースコアのグループを単一のアンダースコアに置き換えます
  4. 末尾と先頭のアンダースコアをすべて削除します

ストレージに関しては、クールな URI は変更されないため、フレンドリ URL はデータベースに移動し、不変である必要があると思います。

于 2008-11-05T21:34:58.783 に答える
4

私自身は、スペースを削除する場合は、読みやすさの理由から (下線を引くと、_事実上 go_away になります) よりも _ を好みます。

可能であれば、拡張文字、つまり ü を ascii に近い同等のものにキャストしてみてください。

ユ -> ユ

ただし、私の経験では、Actual SEO 関連の問題の最大の問題は、URL に素敵なテキストがすべて含まれていることではなく、リンク内のテキストを変更すると、すべての SEO 作業ががらくたに変わることです。インデックス。

このために、stackoverflowが何をするかを提案し、定数エンティティを参照する数値部分を持ち、残りのテキストを完全に無視します(および/または間違っている場合は更新します)

また、非常にヘリシチ的な性質は、人間にとって使い勝手が悪いだけです。人間は長い URLを嫌います。それらをコピーして貼り付けるのは面倒で、壊れやすくなります。それを下位層に細分化できる場合、つまり

/article/1/Some_Article_Title_Here
/article/1/Section/5/Section_Title_Here
/section/19023/Section_Title_here  ( == above link ) 

そうすれば、ブードゥー マジックを行う必要があるのは、番号が付けられた記事が実際削除されたときだけです。そのときは、テキスト部分を検索文字列として使用して、実際の記事などを見つけようとします。

于 2008-11-05T22:02:43.437 に答える
1

解決策2はそれらの典型的なアプローチです...いくつかの改良が可能です。読みやすくするために、ダッシュの代わりにアポストロフィーを無に変えます。通常、タイトルの URL 有効性を変更したバージョンと「実際の」タイトルをデータベースに保存して、インデックス付きの SELECT WHERE を使用してアイテムを選択できるようにします。

でも。適切にエンコードする限り、URL パス部分に実際に不正な文字はありません。たとえば、スペース、ハッシュ、またはスラッシュは、%20、%23、または %2F としてエンコードできます。このようにして、任意の文字列を URL 部分にエンコードできるため、変更されていない実際のタイトルでデータベースからそれを SELECT で戻すことができます。

ただし、Web フレームワークによっては、これに関する潜在的な問題がいくつかあります。たとえば、CGI に基づくものは、エンコードされた %2F と実際の / の違いを見分けることができず、一部のフレームワーク/デプロイメントでは Unicode 文字で問題が発生する可能性があります。

別の簡単で安全な解決策は、URL に主キーを含め、タイトル部分を純粋にアドレスの見栄えを良くするために使用することです。例えば。:

http://www.example.com/x/category-name/subcat-name/article-name/348254863

これが方法です。アマゾンがやってます。データベースのタイトルを変更し、古いタイトルの URL を新しいタイトルに自動的にリダイレクトできるという利点があります。

于 2008-11-05T21:45:20.150 に答える
1

興味のある方はどうぞ。これは私が取っているルートです(うーん... punny):

Route r = new Route("{country}/{lang}/Article/{id}/{title}/", new NFRouteHandler("OneArticle"));
Route r2 = new Route("{country}/{lang}/Section/{id}-{subid}/{title}/", new NFRouteHandler("ArticlesInSubcategory"));
Route r3 = new Route("{country}/{lang}/Section/{id}/{title}/", new NFRouteHandler("ArticlesByCategory"));

これにより、次のような URL を実行できるようになります。

  • site.com/ca/en/Article/123/my-life-and-health
  • site.com/ca/en/Section/12-3/Health-Issues
  • site.com/ca/en/Section/12/
于 2008-11-07T09:00:22.517 に答える
1

URL をクリーニングするとき、アクセント付きの文字を置き換えるために私が使用している方法は次のとおりです。

private static string anglicized(this string urlpart) {
        string before = "àÀâÂäÄáÁéÉèÈêÊëËìÌîÎïÏòÒôÔöÖùÙûÛüÜçÇ’ñ";
        string  after = "aAaAaAaAeEeEeEeEiIiIiIoOoOoOuUuUuUcC'n";

        string cleaned = urlpart;

        for (int i = 0; i < avantConversion.Length; i++ ) {

            cleaned = Regex.Replace(urlpart, before[i].ToString(), after[i].ToString());
        }

        return cleaned;

        // Here's some for Spanish : ÁÉÍÑÓÚÜ¡¿áéíñóúü"

}

それが最も効率的な正規表現かどうかはわかりませんが、確かに効果的です。これは拡張メソッドなので、それを呼び出すには、メソッドを静的クラスに入れ、次のようにするだけです。

string articleTitle = "My Article about café and the letters àâäá";
string cleaned = articleTitle.anglicized();

// replace spaces with dashes
cleaned = Regex.Replace( cleaned, "[^A-Za-z0-9- ]", "");

// strip all illegal characters like punctuation
cleaned = Regex.Replace( cleaned, " +", "-").ToLower();

// returns "my-article-about-cafe-and-the-letters-aaaa"

もちろん、それを「CleanUrl」などと呼ばれる 1 つのメソッドに結合することもできますが、それはあなた次第です。

于 2008-11-07T21:53:34.753 に答える
0

私はwordpressが行うことを行うことをお勧めします-小さな単語を取り除き、違法な文字をダッシュ​​(最大1ダッシュ)で置き換えてから、必要に応じてユーザーにURLを修正させます。SEOがURLを構成可能にすることはより良いことです。

于 2008-11-05T21:49:51.873 に答える
0

フォローアップとして。私にはいくつかのアイデアがあります。ですから、アイデアにコメントするか、質問にあなた自身の答えを与えてください:

解決策1:すべての不正な文字をダッシュ​​に置き換えます。

  • www.mysite.com/diseases---conditions/Auto-immune-disorders/the--1-killer-of-people-is-some-disease/

それは私には少し醜いように見えます...

解決策#2:不正な文字を削除し、スペースを1つのダッシュに置き換えます。

  • www.mysite.com/diseases-conditions/Auto-immune-disorders/the-1-killer-of-people-is-some-disease/

解決策#3いくつかのルールを適用して、特定の文字を単語に置き換えます。

  • www.mysite.com/diseases-and-conditions/Auto-immune-disorders/the-number1-killer-of-people-is-some-disease/

解決策#4すべてのスペースを削除し、キャピタライゼーションを使用する

  • www.mysite.com/DiseasesAndConditions/AutoImmuneDisorders/TheNumber1KillerOfPeopleIsSomeDisease/

(大文字と小文字を区別するサーバーではうまく機能しない可能性があり、読みにくい)

于 2008-11-05T21:17:10.270 に答える
0

解決策2が私の推奨事項です。私は世界最大のSEO専門家ではありませんが、とにかく良いランキングを取得するための「標準的な」方法だと思います。

于 2008-11-05T21:25:48.223 に答える
0

私が通常行うことは、正当な文字のみを許可し、わかりやすいURLをできるだけ短くすることです。また、わかりやすいURLは人間によって挿入されることが多いため、タイトルやコンテンツからわかりやすいURLを生成し、それを使用してデータベースにクエリを実行することはありません。ウェブサイトの管理者がわかりやすいURLを挿入できるように、テーブルの列(friendly_urlなど)を使用します。

于 2008-11-05T21:27:10.233 に答える
0

この問題を解決するには、データベースに追加の列 (例: Title 列の横に UrlTitle) を追加し、すべての不正な文字を取り除いたタイトルを保存して、「&」記号を「and」に置き換え、スペースをアンダースコアに置き換えました。次に、UrlTitle を介してルックアップし、ページ タイトルまたは任意の場所で実際のものを使用できます。

于 2008-11-05T21:35:38.533 に答える
0

Web デザイナーではなくクライアント ユーザーとして、Firefox が「不正な」文字を使用可能な文字に置き換えようとすると、URL が壊れることがあることに気付きました。たとえば、FF は ~ を %7E に置き換えます。それは私には決してロードされません。なぜ HTML エディタとブラウザが A ~ Z と 0 ~ 9 以外の文字を受け入れないことに単純に同意しないのか、私には理解できません。特定のスクリプトで % や ? などが必要な場合は、スクリプト アプリケーションを変更して、英数字で動作するようにします。

于 2009-05-30T09:31:45.637 に答える