web-dev-qa-db-ja.com

わかりやすいURLの一貫性を保つ方法

クローラースクリプト(HTTrack)を使用してサイトをダウンロードしたところ、数百のHTMLファイルを編集して再デプロイする必要がありました。

元のサイトは、Drupalとあまり知られていない独自のCMSの組み合わせで実行されていました。すべてのURLは "クリーン"(.html拡張子なし)であり、末尾のスラッシュで終了しました。

ただし、ダウンロードしたファイルのURL構造には一貫性がありません。 example.com/training/のように、末尾がスラッシュで終わるURLの一部は、example.com/training/index.htmlとしてダウンロードされました。 index.htmlに直接リンクしない限り、再デプロイするとそのURLは/training/に適切に解決されるため、それ自体は問題ではありません。

ただし、URLの大部分は、異なる命名スキームでダウンロードされました。たとえば、example.com/about-us/example.com/about-us.htmlとしてダウンロードされました。何がこの一貫性の欠如を引き起こしたのか私には分かりませんが、今では、サイトを再展開する方法についてのジレンマに直面しています。私のオプションは以下に限定されているようです:

page/index.htmlとしてダウンロードされたファイルは、そのままアップロードできます。すべての内部リンクを[検索と置換]で変更すると、これらのページは前のように機能し、末尾にスラッシュが付きます。

欠点:

  • 多数の同一のファイル名(index.html)があるため、PCで維持するのがわかりにくい

page.htmlとしてダウンロードされたファイルのURLは、.htmlを削除する.htaccessルールで「クリーンアップ」できます。

欠点:

  • URLの末尾のスラッシュは失われます。
  • ディレクトリとファイルに同じ名前を付けることはできません。 example.com/technologyおよびexample.com/technology/methods.html。Apacheが破損するため

いずれにせよ、すべてのURLに末尾のスラッシュを含めるか、どこにも含めないことが賢明だと思います。これらのURLの一貫性を保つ最良の方法は何ですか?また、上記の各方法の欠点を回避する方法のいくつかは何ですか?

1
RandyS

そのままにしておいてください.

Mod_rewriteを使用してURLからindex.htmlを削除するのは非常に簡単です。 www.example.com/index.htmlをwww.dense13.comにリダイレクトするとします。

RewriteEngine On
RewriteRule ^index\.html$ / [R=301,L]

.htaccess構文に慣れていない場合、RewriteRuleディレクティブには、パターン(^ index.html $)、置換(/)、およびオプションでいくつかの修飾子([R = 301、L])の3つの部分があります。パターンでは、記号^は「で始まる」を意味し、記号$は「で終わる」を意味します。また、バックスラッシュはエスケープ文字であり、ドットは通常特別な意味を持っているため、ドットの前に置く必要がありますが、ここでは必要ありません。したがって、この場合、パターンは文字列「index.html」のみに一致します。

パターンが見つかった場合(つまり、リクエストがindex.htmlへの場合)、Webサイトのルートである「/」にリダイレクトされます。

....そして、常にindex.htmlを削除したい場合は?たとえば、www.example.com/music/index.html-> www.dense13.com/music/です。簡単!

RewriteEngine On
RewriteRule ^index\.html$ / [R=301,L]
RewriteRule ^(.*)/index\.html$ /$1/ [R=301,L]

2番目の書き換えルールは、/ index.htmlで終わる要求をチェックし、index.htmlビットを削除します。繰り返しますが、2番目の書き換えルールについて簡単に説明します。

2
5a7an