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


準備

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

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

関連記事

gitのリモートプライベートリポジトリを公開鍵認証を使って環境構築する

概要 みなさんこんにちはcandleです。 今回はgitのリモートプライベートリポジトリを作ってみたいと思います。 リモートリポジトリと言えば、Githubとかbitbucketが有名だと思います。会 …

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

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

pythonのfabricでファイルを分割しfabfileに読み込む方法

概要 皆さんこんにちはcandleです。今回はfabricで分割したpythonファイルを読み込んでみましょう。 fabricはfabfile.pyというファイルに実行したいコマンドを書くのですが、 …

fabricでmysqlコマンドを実行する関数を自作する

概要 皆さんこんにちはcandleです。今回はfabricからリモート先のサーバのmysqlを実行するための環境変数と関数を作成したいと思います。 mysqlは一般にmysqlコマンドをログインしてか …

fluentdでrails logをtailで直接取得する方法

概要 追記) この記事はだいぶ古くなってしまったので、新しく書き直しました。 こちらの方を参照した方が多分良いことが書いてあります。 https://joppot.info/2017/03/17/35 …

  • English
  • 日本語

プロフィール


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

スポンサードリンク

アーカイブ