web-dev-qa-db-ja.com

.htaccessを使用して、略語コードを展開するきれいなURLを作成します

はい、私はこのような質問が山ほどあることを知っていますが、私の問題を解決するものを見つけることができないので、ダウン票を受け取る代償として、これをもう一度尋ねます。リンクが重複していても役立つ場合があります。

これは私が今まで一度もやったことのない仕事です。この種のURL demo.html?code=IT-ROM-FCOがあります。ここで:

  • IT"Italy"のIATAコードです
  • ROMは、"Rome"のIATAコードです
  • FCO"Aeroporto di Roma Fiumicino"のIATAコードです。

このairports/italy/rome/aeroporto-di-roma-fiumicinoのように表示するには、上記のURLを書き換える必要があります。結果の文字列はAPIサービスから取得されます。

私はproducts.php?id=7products/7に変更する簡単な書き換えを知っていますが、そのようなタスクを実行したことはありません(URLを取得する-PHPでデータを取得する新しいURL)

この仕事を達成する方法が本当にわからないので、コード例はありません。ごめんなさい。

1
Cliff Burton

URLにコードを保持することをお勧めします。これにはいくつかの利点があります。

  • コードは簡単に静的に保つことができます。場所の名前は、時間とともに変化することがよくあります。コードがある場合、古い名前の記録を保持し、古い名前に基づいてリダイレクトを実装する必要はありません。
  • Webアプリに必要なデータがURLにある場合、簡単に書き換えることができます。 .htaccessはルックアップテーブルには適していません。 .htaccessに25,000の書き換えルールを設定すると、パフォーマンスが大幅に低下します。

次のようなURLを使用することをお勧めします:/IT-ROM-FCO/airports/italy/rome/aeroporto-di-roma-fiumicino次の書き換えルールを使用して、コードをパラメーターに挿入し、スラッグを削除します。

RewriteRule ^/?([A-Z]+-[A-Z]+(-[A-Z]+)?).* /demo.html?code=$1 [L]

これは、先頭に2つまたは3つの略語があるURLを取得し、それらをcodeパラメーターに入れます。コメントで言及したcode=IT-ROMまたはcode=IT-ROM-FCOケースのいずれかをサポートする必要があります。

次に、サイトでURLを生成したら、hrefにプリティバージョンを配置します。

<a href="/IT-ROM-FCO/airports/italy/rome/aeroporto-di-roma-fiumicino">

また、URLを「正規化」する必要があります。 URL /IT-ROM-FCO/foo-barは同じコンテンツを表示します。プリティURLを含むページの先頭にメタリンクrel正規タグを使用することで、おそらくこれを解決するのが最も簡単でしょう。これにより、どのバージョンが優先URLであるかがGoogleに通知されます。

<link rel="canonical" href="https://example.com/IT-ROM-FCO/airports/italy/rome/aeroporto-di-roma-fiumicino">
2