Cakephpを使ってPC向けのウェブサイトを作成して、
さらに、
http://***.com/m/
なんていうモバイルサイトも作ったりすると、
http://***.com/m/robots.txt
は置けなかったりするんですよね。

なぜかというと、
http://***.com/
webrootに設定されており、
それ以外のディレクトリは、プログラムでしか、
ディレクトリやファイルの追加、削除はできないんです。

(逆を言うと、http://***.com/robots.txt
は、通常どおりFFFTP等でアップロードするだけで済みます)

なので、それ以外のディレクトリは、
FFFTPを使って、
http://***.com/m/
何ていうディレクトリを作ればエラーだし、
もちろんファイルも置くこともできません。

ということで、今回は、
http://***.com/m/robots.txt
という感じでrobotx.txtを、cakephpを使って作成してみます。

routes.phpの設定

まずは、routes.phpの設定から。

Router::connect('/m/robots.txt', array('controller' => 'robots', 'action' => 'index'));

もちろんネーミングは任意ですので、自由に変更してみてください。

コントローラ

それぞれ環境はあるうと思いますが、
/app/controllers/robots_controller.php
という場所と名前でコントローラを作成します。

<?php
class RobotsController extends AppController
{
var $name = 'Robots';
var $uses = 'Post';
var $components = array('RequestHandler');

function index (){
Configure::write ('debug', 0);

$this->RequestHandler->respondAs('text');
$this->viewPath .= '/text';
$this->layout = 'ajax';
}

}
?>

作成するファイルが、robots.txtなので、
respondAsには’text’を設定します。

layoutがなぜ’ajax’なのかは、理由がわかりませんでしたが、
他のを試してみたところできなかったので、
素直に下記参考サイトに従いました。

ビューの作成

/app/views/robots/text/index.ctp
にビューを作成します。

そして、robots.txtの記入のほんの一例だと思いますが、
下記のように書いておきます。

<?php
echo 'User-agent: *'."<br />";
echo 'Sitemap: http://***.com/m/sitemap.xml'."<br />";
echo 'Disallow: '."<br />";
?>

そして、今回レイアウトは作成しません。
なので、コントローラに記入したajaxは完全なダミーです。

robots.txtのまとめ

cakephpを使ったrobots.txt作成はいかがでしたか?
ぜひ、モバイルサイトなどにご活用ください。

でも、やっぱり面倒ですよね。
・何で簡単にアップロードできないんだ?
・例外ルールはないのか?
と思うのですが、フレームワークの便利さの代償と考えるしかないですね。

今回の参考サイト:
http://dsi.vozibrale.com/articles/view/creating-robots-txt-for-cakephp-apps
ありがとうございます。

【関連している記事】