joppot

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

サーバ

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

投稿日:

Pocket

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であればどれでも構わないでしょう。

SPONSORED LINK


準備

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

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

関連記事

CentOSのfluentdでapacheのaccess logとerror logを取得する

概要 みなさんこんにちはcandleです。今回はapacheのアクセスログとエラーログをfluentdを使って取得して見たいと思います。 前提 一台のサーバ上にapacheサーバとfluentdサーバ …

railsのfluent-logger gemを使ってユーザーのアクセスをfluentdサーバに収集する

概要 みなさんこんにちはcandleです。前回からfluentd関連の記事を続けていますが、今回辺りから実用的な使い方を書いていきたいと思います。 fluentdと言えば、ビックデータで扱うようなデー …

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

概要 memcachedはrailsやphpのセッションを保持しておく時に使うソフトというかサーバ的なものです。一般にSNSやログイン式のサービスを提供する時はセッションというのを持ちます。セッション …

awsのs3を操作する為のaccess keyとsecret keyを取得する(IAM)

概要 皆さんこんにちはcandleです。今回はrailsやphpからS3にファイルをアップロードしたりする権限を取得する方法を紹介します。一般にS3にファイルをアップロードしたり削除するにはアクセスキ …

fabricを使ってgit のdiffで指定のバージョンからのファイルをアップロード

概要 皆さんこんにちはcandleです。今回はfabricを使ってgit のpush pullを使わないデプロイを実装します。 一般にgit管理されているプロジェクトのデプロイは下の様な図式でデプロイ …

  • English
  • 日本語

プロフィール


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

スポンサードリンク

アーカイブ