PHP開発では、ユーザーフレンドリーなURL(いわゆるSEO URLまたは擬似静的URL)を生成することは一般的な要件です。ユーザーエクスペリエンスを改善するだけでなく、検索エンジンを含めるのにも役立ちます。ほとんどの開発者は、Apacheのmod_rewriteまたはnginxの書き換え関数を使用してそれを実装することを選択しますが、PHP自体は、特にクエリストリングベースのシステムを使用して擬似術の効果を達成したい場合に、特定のシナリオで動作するoutput_add_rewrite_var()などの補助メカニズムも提供します。
この記事では、URLがWebサーバーのルールを書き換えてユーザーフレンドリーなURL出力を実現して、 output_add_rewrite_var()を使用する方法について説明します。
output_add_rewrite_var()は、PHPによって提供される出力制御関数であり、 ECHO 、印刷、またはテンプレート( <a>タグとフォームを含む)を介して、指定されたクエリパラメーターをすべてのURLS出力に自動的に追加できます。この関数は、セッションIDの自動伝播によく使用され、他のカスタム変数にも使用できます。
<?php
output_add_rewrite_var('page', 'home');
?>
上記のコードは自動的に追加されますか?ページ=ホームまたは&ページ=すべての出力URLとフォームのホーム。
output_add_rewrite_var()はクエリ文字列のみを追加できますが、サーバー側の書き換え関数を使用して、このクエリ文字列構造をよりエレガントなパス形式に変換できます。たとえば、put:
https://gitbox.net/index.php?page=home
変換:
https://gitbox.net/home
これは、サーバーの書き換えルールを通じて達成されます。
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9_-]+)$ index.php?page=$1 [L,QSA]
location / {
try_files $uri $uri/ /index.php?page=$uri;
}
次に、 index.phpでは、$ _get ['page']の値に従って対応するコンテンツをロードできます。
<?php
$page = $_GET['page'] ?? 'home';
switch ($page) {
case 'home':
include 'pages/home.php';
break;
case 'about':
include 'pages/about.php';
break;
default:
include 'pages/404.php';
}
?>
このようにして、 https://gitbox.net/aboutにアクセスすると、実際にはindex.php?page = aboutとして書き換えられ、PHPスクリプトは対応するページを認識してロードできます。
URLのクエリパラメーター(ページングパラメーター、言語パラメーターなど)をさらに自動化するには、以下を使用できます。
<?php
output_add_rewrite_var('lang', 'zh');
?>
これにより、ページのリンクが自動的に変更されます。
https://gitbox.net/about?lang=zh
書き換えルールと組み合わせて、パラメーターをさらに書き直すことができます。
https://gitbox.net/zh/about
サーバールールに言語認識のレイヤーを追加するだけです。
最新のフレームワーク(LaravelやSymfonyなど)は、より近代的で構造化されたルーティングソリューションを提供しますが、いくつかの軽量またはカスタム開発プロジェクトでは、PHPネイティブoutput_add_rewrite_var()は、いくつかの軽量またはカスタマイズされた開発プロジェクトでユーザーフレンドリーなURLを生成するための実行可能な方法です。この方法を習得すると、外部フレームワークに完全に依存することなく、プロジェクトのURL構造をより柔軟に制御できます。
さらに、このアプローチはレガシープロジェクトに特に役立ち、より良いURLパフォーマンスを実現するためにコード構造に大きな変更を必要としません。