joppot

コピペで絶対動く。説明を妥協しない

サーバ

apacheのmod_rewriteでphpのGETパラメータのurlを書き換える

投稿日:


apache_php_url_top_thumb

概要

みなさんこんにちはcandleです。今回はphpでgetでパラメータを受け取る際のurlの書き換えです。
例えば、phpよくあるのがこのようなurlではないでしょうか。

http://localhost/index.php?page=1&keyword=cat

これはもちろん、直感的にわかりやすいのですが、phpの拡張子や、?とか&がかっこ悪いです。
これを最終的には

http://localhost/page/1/keyword/cat

http://localhost/1/cat

にしてみたいと思います。

seo的にはどうかというのは検証していません。

前提

適当なapacheがある。
私はvagrantのcentos6.5のapache2.2でやりますが、apacheであればどれでも構わないでしょう。


準備

centosではapacheの公開ディレクトリであるdocument rootは/var/www/htmlになっているので、そこを使用します。ubuntuやmacでは少々変わると思いますが、それぞれ探してください。

/var/www/htmlにindex.phpを作成します。

cd /var/www/html/
sudo touch index.php

create_index_php

index.phpを開いて、以下を記述します。

<?php
print_r($_GET);
?>

これで、どのようなGETパラメータが飛んできているか確認できます。

1つのパラメータのルーティング

まずは

http://lolcalhost/index.php?page=1

http://localhost/page/1

にします。

/etc/httpd/conf/httpd.confを開きます。

今回はわかりやすく、 DocumentRootの下に記述していきます。

DocumentRootの記述を探して、以下を記述しましょう。

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^/page/([0-9]+)$ /index.php?page=$1 [NC]
</IfModule>

([0-9]+)は数字なら、何文字でもいいよという意味です。それを$1に投げてphpが受け取ります。

rewrite_url_one_param

保存して、httpd サーバを再起動します。

sudo service httpd restart

サーバにアクセスすると、以下のようなルーティングになっていますね。

localhost_page_1_param

GETにどのような値が来ているか確認できます。[page] =>1

2つのGETパラメータを受け取る

2つ受け取りたい場合は様々な方法がありますが、上の定義にのっとってやれば、下のようなルーティングにしてみます。

http://lolcalhost/index.php?page=1&keyword=てんぷら

http://localhost/page/1/keyword/てんぷら

httpd.confを以下のように書き換えます。

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^/page/([0-9]+)/keyword/(.+)$ /index.php?page=$1&keyword=$2 [NC]
</IfModule>

php_get_two_param-1

(.+)は文字は何文字でなんでもいいよという意味です。それを$2に投げてphpが受け取ります。

サーバーを再起動したら、以下のurlにアクセスすると、phpは2つのgetを受け取れます。

http://localhost/page/1/keyword/てんぷら

get_two_param_apache

短い2つのパラメータを受け取るルーティング

urlにpageやkeywordが入るのが邪魔な場合は以下のようにすれば、短いルーティングが可能です。

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^/([0-9]+)/(.+)$ /index.php?page=$1&keyword=$2 [NC]
</IfModule>

short_url

以下にアクセスするとGETの値が取得できます。

http://localhost/1/てんぷら

short_apache_two_param_url

まとめ

上記のような方法で、ルーティングを細かく行えば、php単体のサービスでも綺麗なurlを作成できます。

スポンサードリンク

「為になったなぁ」と思ったら、シェアお願いします。

-サーバ
-,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

wordpressのカテゴリーを削除する

概要 みなさんこんにちはcandleです。今回はwordpressのカテゴリー削除に関してです。実は私、タグとカテゴリーを間違えていて、初期の頃はカテゴリーで全て分類していました。後に、タグで管理する …

Ubuntuにmemcachedをインストールする方法と動作確認

概要 みなさんこんにちは、今回はubuntuにmemcachedを入れて、起動や、動作確認を行ってみたいと思います。 memcachedとは比較的短期間「key=>value」という形で値を保存するサ …

ec2のメモリ状態をwatchとfreeで監視する

English 日本語 概要 みなさんこんにちはcandleです。今回はec2のメモリをリアルタイムで監視する方法を紹介します。 ec2サーバはt2.microだとメモリが1GBしかなく、その上でco …

ubuntuでnginxの起動と最低限のコマンド

概要 今回は、nginxの起動と最低限のコマンドをまとめました。 前提 nginxがインストールされている SPONSORED LINK nginxの起動と停止と再起動 nginxはインストールした当 …

fabricでvagrantのデフォルトの秘密鍵を使ってサーバにアクセスする

概要 みなさんこんにちはcandleです。今回はfabricを使ってvagrant上のvmにアクセスする方法を紹介します。様々なサイトを閲覧すると、あまりvagrantのデフォルトの鍵を使用して、fa …

  • English
  • 日本語

ベンチャー企業のCTOをやってます。大学時代にプログラミングを始め、javaから入門し、C++へて、PHPへと進み、会社ではRailsを使用。自動化が大好きなプログラマー