PHP

PHPでURLに特定のディレクトリや文字列があるか判別

例えばカレント表示など、特定のディレクトリの画面においてのみHTMLやCSSを変える、ということがしたい場合があります。そういうときに便利なURLで判別する方法をご紹介します。

コード

ディレクトリで判別する場合

まずURLを取得し、strposで、URLに特定の文字がある場合を判別しています。特定の文字を/ディレクトリ名/とスラッシュで前後を挟めば、特定のディレクトリ、またはそれ以下の階層の場合のみ動く処理を書くことができます。

特定の文字列があるか判別する方法は他にもstrstrpreg_matchなどがありますが、strposが最も早く、PHPの公式文書において推奨されています。

<?php
$path = $_SERVER&#91;'REQUEST_URI'&#93;;
if( strpos( $path, '/ディレクトリ名/' ) !== false ):
   //処理
endif;
?>

ドメイン名(ホスト名)で判別する場合

利用するケースは特殊かとは思いますが、ドメイン名(ホスト名)で判別する場合は次のようにします。

<?php
$domain = $_SERVER&#91;'HTTP_HOST'&#93;;
if( strpos( $domain, 'xxx' ) !== false ):
   //処理
endif;
?>

$_SERVER[‘REQUEST_URI’]と$_SERVER[‘HTTP_HOST’]の違い

$_SERVER['REQUEST_URI']$_SERVER['HTTP_HOST']の違いは以下の通りです。

$_SERVER[‘REQUEST_URI’]
https://www.example.com/sample/のうちのwww.example.comを取得
$_SERVER[‘REQUEST_URI’]
https://www.example.com/sample/のうちの/sample/を取得

注意点

ディレクトリで判別する場合、スラッシュで前後を挟むことで、うっかり他の画面でも書いた処理が動いてしまうということはないはずですが、同じ名称のディレクトリを他にも作ってしまうと、当然そのディレクトリでは動いてしまうので、その点は留意が必要です。

まとめ

たまに使うコードなので、私のコピペ用でした。

著者のイメージ画像

株式会社BringFlower
稲田 高洋(Takahiro Inada)

2003年から大手総合電機メーカーでUXデザインプロセスの研究、実践。UXデザイン専門家の育成プログラム開発。SEOにおいても重要なW3Cが定めるWeb標準仕様策定にウェブアクセシビリティの専門家として関わる。2010~2018年に人間中心設計専門家を保有、数年間ウェブアクセシビリティ基盤委員も務める。その後、不動産会社向けにSaaSを提供する企業の事業開発部で複数サービスを企画、ローンチ。CMSを提供し1000以上のサイトを分析。顧客サポート、サイト運営にも関わる。
2022年3月にBringFlowerを開業し、SEOコンサル、デザイン、ウェブ制作を一手に受ける。グッドデザイン賞4件、ドイツユニバーサルデザイン賞2件、米国IDEA賞1件の受賞歴あり。