.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=7
をproducts/7
に変更する簡単な書き換えを知っていますが、そのようなタスクを実行したことはありません(URLを取得する-PHPでデータを取得する新しいURL)
この仕事を達成する方法が本当にわからないので、コード例はありません。ごめんなさい。
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">