Apacheのmod_rewriteモジュールは、URLを書き換える強力なツールであり、動的なWebページの生成に役立ちます。本記事では、mod_rewriteを活用してMySQLデータベースに動的にアクセスする方法を詳しく解説します。特定のURLリクエストに応じてデータベースクエリを実行し、その結果をページに反映させることで、柔軟で効率的なWebアプリケーションを構築できます。
この技術を使えば、商品ページや記事一覧などをURLだけで管理し、SEOに適したURL構造を維持しながら、裏ではデータベースからコンテンツを取得する仕組みを作ることが可能です。ApacheとMySQLを連携させ、mod_rewriteを最大限に活用することで、ユーザーエクスペリエンスの向上やサイト管理の簡易化が図れます。
この記事では、mod_rewriteの基本から始め、具体的な設定例や応用方法を段階的に説明していきます。初心者から中級者までを対象に、理解しやすく実践的な内容となっています。
mod_rewriteとは?基本の役割と機能
mod_rewriteは、Apache HTTPサーバーのモジュールの一つで、URLのリダイレクトやリライトを行う機能を提供します。これにより、ユーザーがアクセスするURLを柔軟に書き換えることができ、動的に生成されるコンテンツを静的なURLで提供することが可能になります。
mod_rewriteの主な役割
mod_rewriteの役割は、主に以下の3つに分類されます。
1. URLの書き換え
ユーザーが入力したURLをサーバー内部で異なるURLに変換します。例えば、/products/item123
というURLを内部で product.php?id=123
にリライトすることで、クリーンなURLを維持します。
2. リダイレクト
特定の条件を満たしたURLを他のURLにリダイレクトします。例えば、http://example.com/old-page
を http://example.com/new-page
に転送することで、ページ移行時の利便性を確保します。
3. 条件付きルールの適用
IPアドレスやクエリパラメータに応じて動的にURLを書き換えることができます。これにより、セキュリティの向上やアクセス制限の実装が可能になります。
mod_rewriteの特徴
- 柔軟性:複雑なURL変換が可能で、正規表現を使った高度なパターンマッチングが行えます。
- SEO対策:動的URLを静的URLに変換することで、検索エンジンのインデックス登録を促進します。
- ユーザーエクスペリエンスの向上:直感的で理解しやすいURLを提供することで、サイトの使いやすさが向上します。
mod_rewriteは、MySQLデータベースとの連携時にも非常に有用で、動的にデータを取得してWebページを生成する際に不可欠な技術です。次のセクションでは、MySQLデータベースへの動的アクセス方法について掘り下げていきます。
MySQLデータベースへの動的アクセスの概要
Apacheのmod_rewriteを利用してMySQLデータベースに動的にアクセスすることで、URLリクエストに応じて異なるデータを取得し、Webページを生成できます。この方法は、商品詳細ページやブログ記事ページなど、コンテンツがデータベースに格納されている場合に特に有効です。
動的アクセスの仕組み
mod_rewriteは、URLリクエストをサーバー内部で処理し、PHPなどのスクリプトを介してMySQLデータベースから必要な情報を取得します。例えば、https://example.com/product/123
というリクエストを受け取った場合、mod_rewriteはこのリクエストを product.php?id=123
に書き換え、PHPスクリプトがMySQLからIDが123の商品の情報を取得して表示します。
動作の流れ
- ユーザーがブラウザで
https://example.com/item/456
にアクセス - mod_rewriteがリクエストを受け取り、内部で
item.php?id=456
に書き換え - PHPスクリプトが
id=456
に基づきMySQLデータベースに問い合わせを行う - データベースから取得した情報をHTMLとしてレンダリングし、ユーザーに表示
メリット
- クリーンなURLの提供:
/product/123
のような分かりやすいURLは、SEOに強く、ユーザーにも優しいです。 - コードの再利用:1つのPHPスクリプトで複数のデータにアクセスでき、効率的なコーディングが可能になります。
- 保守性の向上:URL構造を変更するだけで、サイト全体の動作を変更できるため、保守や拡張が容易です。
例:動的URLとクエリパラメータ
RewriteEngine On
RewriteRule ^product/([0-9]+)$ product.php?id=$1 [L]
このルールでは、/product/456
のリクエストが product.php?id=456
に変換されます。これにより、ユーザーに見えるURLはシンプルでありながら、内部ではデータベースにアクセスして動的にページを生成します。
次は、ApacheとMySQLの環境を構築し、実際にmod_rewriteを使った設定方法を解説します。
ApacheとMySQLの環境構築と設定手順
Apacheでmod_rewriteを使ってMySQLデータベースに動的にアクセスするには、サーバー環境の準備と基本的な設定が必要です。ここでは、ApacheとMySQLのインストールからmod_rewriteの有効化までを段階的に解説します。
必要な環境
- Webサーバー:Apache
- データベース:MySQL
- スクリプト言語:PHP (または任意のサーバーサイド言語)
ApacheとMySQLのインストール
主要なLinuxディストリビューションを例に、LAMP環境(Linux, Apache, MySQL, PHP)の構築方法を説明します。
Ubuntu/Debianの場合
“`bash
sudo apt update
sudo apt install apache2 mysql-server php libapache2-mod-php php-mysql
このコマンドでApache、MySQL、PHPが一度にインストールされます。
<h4>CentOS/RHELの場合</h4>
bash
sudo yum install httpd mysql-server php php-mysql
sudo systemctl start httpd
sudo systemctl enable httpd
sudo systemctl start mysqld
sudo systemctl enable mysqld
<h3>MySQLの初期設定</h3>
インストール後、MySQLの初期セットアップを行います。
bash
sudo mysql_secure_installation
このスクリプトに従ってrootパスワードの設定や不要なデフォルトデータベースの削除を行います。
<h3>Apacheのmod_rewriteを有効化</h3>
mod_rewriteを使用するには、Apacheでモジュールを有効にする必要があります。
<h4>mod_rewriteの有効化 (Ubuntu/Debian)</h4>
bash
sudo a2enmod rewrite
sudo systemctl restart apache2
<h4>mod_rewriteの有効化 (CentOS/RHEL)</h4>
bash
sudo nano /etc/httpd/conf/httpd.conf
httpd.confファイルを開き、以下の行を確認し、コメントアウトされていれば解除します。
apache
LoadModule rewrite_module modules/mod_rewrite.so
設定変更後、Apacheを再起動します。
bash
sudo systemctl restart httpd
<h3>MySQLデータベースとテーブルの作成</h3>
データベースを作成し、サンプルデータを登録します。
sql
CREATE DATABASE sampledb;
USE sampledb;
CREATE TABLE products (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
price DECIMAL(10, 2)
);
INSERT INTO products (name, price) VALUES (‘Product A’, 1000), (‘Product B’, 1500);
これで、ApacheとMySQLの環境が整いました。次のステップでは、mod_rewriteを使ったURL書き換えの具体的な方法について解説します。
<h2>mod_rewriteのインストールと有効化方法</h2>
mod_rewriteを使用するためには、Apacheにmod_rewriteモジュールをインストールし、有効化する必要があります。ほとんどのApacheインストールではmod_rewriteは標準で含まれていますが、設定を変更しないと動作しません。ここでは、Linux環境(Ubuntu/DebianおよびCentOS/RHEL)でのmod_rewriteのインストールと有効化の方法を解説します。
<h3>mod_rewriteのインストール確認</h3>
まず、mod_rewriteがインストールされているか確認します。
bash
apache2ctl -M | grep rewrite # Ubuntu/Debian系
httpd -M | grep rewrite # CentOS/RHEL系
このコマンドで `rewrite_module` が表示されれば、すでにインストールされています。
<h4>インストールされていない場合</h4>
**Ubuntu/Debian系**
bash
sudo apt install apache2
**CentOS/RHEL系**
bash
sudo yum install httpd
Apacheをインストールすると、mod_rewriteも自動的に含まれます。
<h3>mod_rewriteの有効化</h3>
次に、mod_rewriteを有効化します。
<h4>Ubuntu/Debianの場合</h4>
bash
sudo a2enmod rewrite
sudo systemctl restart apache2
`a2enmod` コマンドはApacheのモジュールを有効化するためのツールです。変更を反映するためにApacheを再起動します。
<h4>CentOS/RHELの場合</h4>
CentOS/RHELでは、httpd.confファイルを直接編集します。
bash
sudo nano /etc/httpd/conf/httpd.conf
次の行がコメントアウトされていれば、`#` を削除して有効化します。
apache
LoadModule rewrite_module modules/mod_rewrite.so
保存後、Apacheを再起動します。
bash
sudo systemctl restart httpd
<h3>.htaccessファイルの利用許可</h3>
mod_rewriteを正しく動作させるには、`.htaccess` ファイルを利用できるように設定を変更する必要があります。
<h4>Ubuntu/Debianの場合</h4>
bash
sudo nano /etc/apache2/apache2.conf
次のセクションを見つけて、`AllowOverride None` を `AllowOverride All` に変更します。
apache
AllowOverride All
その後、Apacheを再起動します。
bash
sudo systemctl restart apache2
<h4>CentOS/RHELの場合</h4>
bash
sudo nano /etc/httpd/conf/httpd.conf
次のように編集します。
apache
AllowOverride All
変更後にApacheを再起動します。
bash
sudo systemctl restart httpd
これでmod_rewriteが有効化され、`.htaccess` ファイルを使ってURLの書き換えができるようになります。次のセクションでは、実際にmod_rewriteを使ってURLを書き換える具体的な設定例を解説します。
<h2>.htaccessファイルを使ったmod_rewrite設定例</h2>
mod_rewriteを利用するためには、`.htaccess`ファイルを使ってApacheにURLの書き換えルールを設定します。.htaccessはディレクトリ単位でApacheの動作を制御する設定ファイルで、簡単にリダイレクトやURLリライトを行うことができます。
<h3>.htaccessファイルの作成</h3>
まず、対象のディレクトリに`.htaccess`ファイルを作成します。
bash
sudo nano /var/www/html/.htaccess
このファイル内にmod_rewriteのルールを記述します。
<h3>基本的なmod_rewriteルール</h3>
以下は、URLをクリーンな形式に変換する基本的なmod_rewriteルールの例です。
apache
RewriteEngine On
RewriteRule ^product/([0-9]+)$ product.php?id=$1 [L]
<h4>ルールの解説</h4>
- **RewriteEngine On**: mod_rewriteエンジンを有効にします。
- **RewriteRule**: URLの書き換えルールを指定します。
- `^product/([0-9]+)$` は、`/product/123` のようなリクエストをキャッチします。
- `product.php?id=$1` は、内部で `product.php?id=123` にリライトします。
- `[L]` は、このルールで書き換えが終了することを意味します(後続のルールを処理しません)。
<h3>複数のリダイレクトルール例</h3>
apache
RewriteEngine On
RewriteRule ^blog/([a-zA-Z0-9_-]+)$ blog.php?post=$1 [L]
RewriteRule ^category/([a-zA-Z0-9_-]+)$ category.php?cat=$1 [L]
RewriteRule ^page/([0-9]+)$ page.php?page_id=$1 [L]
- `/blog/article-title` → `blog.php?post=article-title`
- `/category/tech` → `category.php?cat=tech`
- `/page/5` → `page.php?page_id=5`
<h3>動的パラメータの利用</h3>
以下の例では、クエリ文字列をそのままURLのパスとして処理します。
apache
RewriteRule ^search/(.*)$ search.php?query=$1 [L]
- `/search/laptop` → `search.php?query=laptop`
<h3>リダイレクト設定</h3>
mod_rewriteを使って301リダイレクト(恒久的リダイレクト)を設定することもできます。
apache
RewriteEngine On
RewriteRule ^old-page$ /new-page [R=301,L]
- `/old-page` にアクセスがあった場合、自動的に `/new-page` にリダイレクトされます。
<h3>エラーページのリダイレクト</h3>
存在しないページへのアクセスをカスタム404ページにリダイレクトする例です。
apache
ErrorDocument 404 /custom_404.html
<h3>.htaccessの権限設定</h3>
セキュリティの観点から、`.htaccess`ファイルの権限を制限します。
bash
sudo chmod 644 /var/www/html/.htaccess
- 所有者が読み書き可能、グループとその他のユーザーは読み取り専用になります。
これで、`.htaccess`を使った基本的なmod_rewriteの設定が完了します。次は、URLパターンを使ってMySQLクエリを動的に実行する方法を解説します。
<h2>URLパターンによるMySQLクエリの作成と実行</h2>
mod_rewriteを利用して、URLからMySQLデータベースに動的にアクセスし、クエリを実行する方法を解説します。この方法により、クリーンでわかりやすいURLを維持しながら、必要なデータをデータベースから取得してページを生成できます。
<h3>基本的な仕組み</h3>
URLリクエストをPHPスクリプトにリダイレクトし、PHP側でMySQLデータベースへのクエリを動的に生成・実行します。mod_rewriteを使うことで、複数のリクエストパターンを1つのスクリプトで処理することが可能になります。
<h3>例:商品ページの動的生成</h3>
`https://example.com/product/123` というURLから、MySQLデータベース内のIDが123の商品情報を取得して表示する例を見ていきます。
<h4>1. mod_rewriteルールの設定 (.htaccess)</h4>
まずは、URLから商品IDを取得するmod_rewriteルールを設定します。
apache
RewriteEngine On
RewriteRule ^product/([0-9]+)$ product.php?id=$1 [L]
このルールにより、`/product/123` というURLが `product.php?id=123` に書き換えられます。
<h4>2. product.phpの作成</h4>
次に、`product.php`ファイルを作成し、MySQLから商品情報を取得して表示するPHPスクリプトを記述します。
php
<?php
// データベース接続
$servername = “localhost”;
$username = “root”;
$password = “”;
$dbname = “sampledb”;
$conn = new mysqli($servername, $username, $password, $dbname);
// 接続確認
if ($conn->connect_error) {
die(“Connection failed: ” . $conn->connect_error);
}
// 商品IDを取得
$product_id = isset($_GET[‘id’]) ? intval($_GET[‘id’]) : 0;
// SQLクエリの作成と実行
$sql = “SELECT * FROM products WHERE id = $product_id”;
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo “
” . htmlspecialchars($row[“name”]) . “
“;
echo “
価格: ¥” . htmlspecialchars($row[“price”]) . “”;
}
} else {
echo “商品が見つかりません。”;
}
$conn->close();
?>
<h3>動作の流れ</h3>
1. ユーザーが `https://example.com/product/123` にアクセス
2. mod_rewriteがURLを `product.php?id=123` にリライト
3. `product.php` がMySQLデータベースにクエリを実行し、IDが123の商品情報を取得
4. 取得したデータをページに動的に表示
<h3>複数の動的ページへの対応</h3>
同様の手法で、カテゴリページやブログ記事なども動的に生成できます。
<h4>カテゴリページの例</h4>
apache
RewriteRule ^category/([a-zA-Z0-9_-]+)$ category.php?name=$1 [L]
`https://example.com/category/electronics` のリクエストが `category.php?name=electronics` に書き換えられます。
php
<?php
$category_name = isset($_GET[‘name’]) ? $_GET[‘name’] : ”;
$sql = “SELECT * FROM products WHERE category = ‘$category_name'”;
<h3>セキュリティの考慮</h3>
- **SQLインジェクション対策**:プレースホルダーを使ったプリペアドステートメントを利用しましょう。
- **エラーハンドリング**:データが存在しない場合の処理を適切に記述します。
これにより、URLパターンに応じてMySQLデータベースへのクエリを動的に生成・実行するWebアプリケーションを構築できます。次のセクションでは、セキュリティを考慮したmod_rewriteの設定方法について解説します。
<h2>セキュリティを考慮したmod_rewriteの設定方法</h2>
mod_rewriteは便利な反面、誤った設定を行うとセキュリティリスクが発生する可能性があります。不正アクセスやSQLインジェクション、ディレクトリトラバーサル攻撃などを防ぐために、適切な設定と対策を行う必要があります。
<h3>セキュリティ上のリスク</h3>
1. **URLを通じたSQLインジェクション**
2. **不正なファイルへのアクセス**
3. **ディレクトリトラバーサル攻撃**
4. **パス情報の露出**
これらを防ぐためのmod_rewriteルールとPHP側の対策を順に解説します。
<h3>不正アクセス防止のためのルール設定</h3>
URLで想定外のパスが指定された場合にアクセスを拒否するルールを設定します。
<h4>ディレクトリトラバーサルの防止</h4>
apache
RewriteEngine On
RewriteCond %{REQUEST_URI} “../” [NC]
RewriteRule .* – [F,L]
- `\.\./` は「../」にマッチする正規表現で、上位ディレクトリにアクセスしようとするリクエストを禁止します。
- `[F]` は403 Forbiddenを返し、アクセスを拒否します。
<h4>SQLインジェクション対策</h4>
apache
RewriteCond %{QUERY_STRING} [\’\”\;] [NC]
RewriteRule .* – [F,L]
- クエリストリング内に `';` や `"` などの特殊文字が含まれている場合にアクセスを拒否します。SQLインジェクションの初歩的な攻撃を防ぎます。
<h4>特定のファイルへの直接アクセスを制限</h4>
apache
RewriteRule ^(config.php|database.php|.env)$ – [F,L]
- `config.php` や `database.php` など、重要な設定ファイルへの直接アクセスを防止します。
- `.env` ファイルへのアクセスも防ぎます。
<h3>入力値の検証とサニタイズ</h3>
PHP側でもユーザーの入力を検証し、安全な形にサニタイズすることで、SQLインジェクションのリスクを軽減できます。
<h4>プレースホルダーを使ったクエリの実行例</h4>
php
<?php
// データベース接続
$servername = “localhost”;
$username = “root”;
$password = “”;
$dbname = “sampledb”;
$conn = new mysqli($servername, $username, $password, $dbname);
// SQLインジェクション防止のためのプリペアドステートメント
$stmt = $conn->prepare(“SELECT * FROM products WHERE id = ?”);
$stmt->bind_param(“i”, $product_id);
$product_id = isset($_GET[‘id’]) ? intval($_GET[‘id’]) : 0;
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo “
” . htmlspecialchars($row[“name”]) . “
“;
echo “
価格: ¥” . htmlspecialchars($row[“price”]) . “”;
}
} else {
echo “商品が見つかりません。”;
}
$stmt->close();
$conn->close();
?>
<h3>クロスサイトスクリプティング(XSS)対策</h3>
表示するデータをエスケープ処理してXSS攻撃を防ぎます。
php
echo htmlspecialchars($row[“name”]);
<h3>管理者向けアクセス制限</h3>
管理ページへのアクセスをIPアドレスで制限します。
apache
Require ip 192.168.1.100 Require ip 203.0.113.0/24
特定のIPアドレスからのみ管理画面にアクセスできるように設定します。
<h3>HTTPSリダイレクト</h3>
全てのリクエストをHTTPSにリダイレクトし、盗聴や改ざんを防止します。
apache
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
<h3>まとめ</h3>
- mod_rewriteを利用する際は、不正アクセスやSQLインジェクションなどのリスクを常に意識し、適切なルールを設定することが重要です。
- サーバー側でのフィルタリングだけでなく、PHP側でのサニタイズやプレースホルダーを活用し、二重の対策を行いましょう。
次のセクションでは、実際にmod_rewriteを使った動的アクセスの応用例について詳しく解説します。
<h2>動的アクセスの具体的な応用例とデモ</h2>
mod_rewriteとMySQLを組み合わせることで、柔軟で拡張性の高いWebサイトを構築できます。ここでは、商品ページやカテゴリページ、検索機能を動的に生成する具体的な応用例を紹介します。
<h3>1. 商品詳細ページの動的生成</h3>
ユーザーが `https://example.com/product/123` にアクセスした際に、商品ID 123の情報をMySQLから取得して表示します。
<h4>mod_rewriteルール (.htaccess)</h4>
apache
RewriteEngine On
RewriteRule ^product/([0-9]+)$ product.php?id=$1 [L]
<h4>product.php (PHPスクリプト)</h4>
php
<?php
$servername = “localhost”;
$username = “root”;
$password = “”;
$dbname = “sampledb”;
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die(“Connection failed: ” . $conn->connect_error);
}
$product_id = isset($_GET[‘id’]) ? intval($_GET[‘id’]) : 0;
$stmt = $conn->prepare(“SELECT * FROM products WHERE id = ?”);
$stmt->bind_param(“i”, $product_id);
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
echo “
” . htmlspecialchars($row[“name”]) . “
“;
echo “
価格: ¥” . htmlspecialchars($row[“price”]) . “”;
}
} else {
echo “商品が見つかりません。”;
}
$stmt->close();
$conn->close();
?>
<h3>2. カテゴリページの動的生成</h3>
カテゴリ名に基づいて、該当する商品をリスト表示します。
<h4>mod_rewriteルール (.htaccess)</h4>
apache
RewriteRule ^category/([a-zA-Z0-9_-]+)$ category.php?name=$1 [L]
<h4>category.php (PHPスクリプト)</h4>
php
<?php
$category_name = isset($_GET[‘name’]) ? $_GET[‘name’] : ”;
$conn = new mysqli(“localhost”, “root”, “”, “sampledb”);
$stmt = $conn->prepare(“SELECT * FROM products WHERE category = ?”);
$stmt->bind_param(“s”, $category_name);
$stmt->execute();
$result = $stmt->get_result();
echo “
カテゴリ: ” . htmlspecialchars($category_name) . “
“;
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
echo “
” . htmlspecialchars($row[“name”]) . ” – ¥” . htmlspecialchars($row[“price”]) . “”;
}
} else {
echo “該当する商品がありません。”;
}
$stmt->close();
$conn->close();
?>
<h3>3. 検索機能の実装</h3>
ユーザーが `/search/laptop` のようなURLで検索できるようにします。
<h4>mod_rewriteルール (.htaccess)</h4>
apache
RewriteRule ^search/(.*)$ search.php?query=$1 [L]
<h4>search.php (PHPスクリプト)</h4>
php
<?php
$query = isset($_GET[‘query’]) ? ‘%’ . $_GET[‘query’] . ‘%’ : ‘%’;
$conn = new mysqli(“localhost”, “root”, “”, “sampledb”);
$stmt = $conn->prepare(“SELECT * FROM products WHERE name LIKE ?”);
$stmt->bind_param(“s”, $query);
$stmt->execute();
$result = $stmt->get_result();
echo “
検索結果: ” . htmlspecialchars($_GET[‘query’]) . “
“;
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
echo “
” . htmlspecialchars($row[“name”]) . ” – ¥” . htmlspecialchars($row[“price”]) . “”;
}
} else {
echo “該当する商品がありません。”;
}
$stmt->close();
$conn->close();
?>
<h3>4. カスタム404エラーページ</h3>
存在しないページへのアクセスがあった場合に、404エラーページを表示します。
<h4>.htaccess設定</h4>
apache
ErrorDocument 404 /404.php
<h4>404.php (PHPスクリプト)</h4>
php
404 – ページが見つかりません”; echo “
申し訳ありませんが、お探しのページは存在しません。”; ?>
“`
デモ環境の構築
上記の例を実装することで、シンプルなECサイトやブログサイトの基礎が完成します。必要に応じてURLルールを追加し、さらに複雑な動的Webページを作成することが可能です。
次のセクションでは、記事のまとめとして、ここまで解説した内容を整理します。
まとめ
本記事では、Apacheのmod_rewriteを活用してMySQLデータベースに動的にアクセスする方法を解説しました。mod_rewriteは、URLのリダイレクトや書き換えを行い、クリーンで分かりやすいURLを維持しながらデータベースと連携する強力な手段です。
具体的には、
- mod_rewriteの基本的な役割と機能
- ApacheとMySQLの環境構築とmod_rewriteの有効化手順
- .htaccessファイルを使ったリライトルールの設定例
- URLパターンによるMySQLクエリの作成と実行方法
- セキュリティを考慮したmod_rewriteの設定方法
- 実際の応用例として商品ページやカテゴリページの動的生成
を詳しく説明しました。
mod_rewriteとMySQLを組み合わせることで、柔軟で拡張性の高いWebアプリケーションを構築することが可能になります。セキュリティにも注意を払い、ユーザー体験を向上させる動的サイトを構築していきましょう。
コメント