さくらVPSにDebianを入れて利用。自分用メモ

インストールは管理画面から、さくらのヘルプを参考に行えば特に問題なく終わる。
インストール後、リモートコンソールから必要な設定。

# apt-get install sudo
# visudo

:追記
username ALL=(ALL) ALL

OSXからだと=から入力できなかったので、windowsから。

ここからはSSHで。
$ ssh username@IP Address -p 22

# mkdir ~/.ssh/
# chmod 700 ~/.ssh/

scpでファイル転送。
scp .ssh/id_rsa.pub username@ipaddress:/home/username/.ssh/authorized_keys

# chmod 600 authorized_keys

/etc/ssh/sshd_config を編集。

Port 60000(任意の数字に)
PermitRootLogin no
PasswordAuthentication no
UsePAM no

# /etc/init.d/sshd restart

apt-getでapache2,php,mysqlを入れる。

次はログとiptablesの設定


ページURLの変更 – Yiiで301リダイレクト

さて、URLを変更したので301リダイレクトを利用してページを正規化しようと思う。ほんとはやらなくてもいいかなぁ、とか思ってたんだけど、調べるとYiiなら、すごく簡単に実現できるので、対応することに。

Yii::app()->request->redirect(Yii::app()->createUrl($url),true,301);

この一行だけ。$urlは絶対URLかサイトトップからのパスかな?? 普段よく使うarray(‘page’,'id’=>$id);みたいな形式は使えない。

減ったと書いていたアクセスもマックス時の半分ほどまで戻っており、今日はさらにもう少し、アクセス数を伸ばせそう。SEO対策した新しいURLが既にクロールされてて、最近のアクセスもほぼ新しいURLだし、前回のエントリーでやったSEO対策がばっちり効いてるみたい。だと、思ったらただの偶然だったりしてw

まぁ、とりあえず順調。しばらくこのまま様子見。もしくは、作ろうと思ってたトップページを作ろうかな。いわゆるアクセスの多いページとか人気やオススメを集めたトップページ。めんどくさいからあんまりやりたくないんだけど。なぜなら、前回も言ったけど、「旬ワード アーカイブ」はトップページにアクセスする訪問者なんてほとんどいないだろうし。。。

むしろ、ちょっと閃いたので、今度は逆にほとんどトップページにしかアクセスされないようなペラサイト(動的なやつ)をYiiで作ってみようかな。

 


アクセス数が急落したのでSEO対策してみた

作ったばっかのサイト「旬ワード アーカイブ」のアクセス数がある日急落した。

たいしてコンテンツ力のあるサイトではないのでwまぁいいかなと思ったんですが、一応原因を突き止めることに。アクセス数的には一日でおよそマックスの日の3分の1。さらに翌日には10分の1。

まぁ、SEO対策どころかページ内リンクもまともに機能していないサイトだったので、むしろそれまでよくアクセスが増えていったな、という。せっかくアクセス数の多かったページも、10日後にはトップページからだと10回近くクリックしないと辿りつけないぐらい埋もれる仕様だしww というのも、最初の考えでは、とりあえず、一回クロールしてくれたら、トップページから100クリックしなきゃ見れないページだろうが、検索エンジンからはアクセスできるからいいんじゃないかと。ページの性質上トップページから順当にサイト内のコンテンツを見るような訪問者はほぼ皆無だろうしw 検索エンジンから個々のページへの直接のリンクしか期待していなかったのである。だが、どうもそういう訳にはいかないようだ。もちろん、それが原因と決まったわけではないが。

対策として、コンテンツ内のアクセサシビリティを良くするため、日付ごとのリンク。パンくずナビ。サイトマップなどを設置。全ページ共通に近かったタイトルを動的に更新。文言も以前よりはクリックしたくなるようなタイトル、Descriptionを考えて変更。Keywordsはあまり意味が無いという話だけど、スパムだと勘違いされないよう少しだけ記載。h1タグとかも無茶苦茶だったのを、ある程度の意味付けをさせ、画像のリンクにはALTを付加した。

最後に、SEO的には逆効果かもしれないが、いまのうちにURLを日付形式に変更。また、コンテンツ的に日本語(2バイト文字)をURLに使用しやすい内容だったので、拡張子htmlの前にだけ一部使用してみた。これはどうなんだろうか。SEO的に有効だというサイトもあったけど、しかし、数あるSEO関連のサイトで実際に日本語をURLにしてるサイトなんてほとんどなかったことから、まともにアクセスを上げたいサイトでは使わないほうがいいといまは思っている。あくまで、テスト、テスト。

将来的にまともなサイトも作りたいので、こうした試作がどの程度効果を生むのか、あるいは、意味が無いのか、逆効果か、試してみようかと。適当にだが何年も書いてきたブログがアクセス数であっというまに抜かれてしまったんだもんな。その後、あっちゅうまに10分の1になったけどw

ちなみに上記の対策をして一日ほど、アクセスはマックス時の3分の1に戻っている。とはいえ、クローラーはまだ来てないから上記対策の成果ではないようだ。うーむ、アクセスの低下は単に検索エンジン側の理由なのかな。ほんと2,3日ぐらいgoogle先生からのアクセスがほとんどなくなったんだけど。


Yii Frameworkでの製作例。

shunword.com – 旬ワード アーカイブ -

さっそく簡単なものを作ってみたので、公開。

ちなみに、制作期間は一週間ほど。しかも、半分以上はデザインにかかった時間・・・ うーむ、デザインがどうしても苦手だ。こういうのサクサクッとやれる人を尊敬する。

中身はスクレイピングとかXMLのパースとか。。。
フォームからの入力もないし、あまりYiiの良い部分を生かせてないなぁ、と思うけど、まあこんな感じのものが作れるよ、ということで。

本来はユーザからの入力があるようなページのほうがYiiの特徴を生かせる気がするんだけどなぁ。まぁ、そういうのはまた別で作ろうかな。こういう簡単なアプリケーションを二、三週間にひとつの割合で作っていければ素敵だな。

しかし、一番のネックはデザイン。コーディング自体はサクサクサクっと進むのに、デザインでどうしても時間がかかってる気がして仕方ない。全部同じデザインって言うのもなんとなくスッキリしないし。デザイン部分もPHPフレームワークみたいに簡単に作れるようになる方法ってなんかないのかなぁ。


Yiiで直前のSQL文でinsertしたidを取得

Yiiで直前にinsertしたレコードのプライマリキーを取得する。

Yii::app()->db->lastInsertID

こういう細かい便利な機能のあるとこがフレームワークのいいところだと思う。

自分の調べ方が悪いだけかもしれないけど、CakePHPよりもYiiのほうが、自分が欲しい機能がある、若しくは、関連するフォーラムや解説ページが見つかりやすい。しかも、大抵の設定項目や情報をコントローラーからでもビューからでも使うことができて柔軟性がある気がする。


YiiでURLをさらに短くする。

SiteControllerへのアクセスを、前回設定したよりもさらに短いURLでアクセスできるようにする。

内容としては、
・site/indexへのアクセスはコントローラ名、アクション名ともに省略
・site/otheractionへのアクセスはコントローラ名を省略
・それぞれidという変数がある場合

	// uncomment the following to enable URLs in path-format
	'urlManager'=>array(
		'urlFormat'=>'path',
		'showScriptName'=>false,
		'rules'=>array(
			'/<id:\d+>' => 'site/index',
			'<action:(otheraction)>/<id:\d+>' => 'site/<action>',
			'<controller:\w+>/<id:\d+>'=>'<controller>/view',
			'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
			'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',

‘rules’の上2行を追記。

これで、たとえば、
http://shunword.com/12 へのアクセスは http://shunword.com/site/index/12 へのアクセスと同様に、また、http://shunword.com/otheraction/5 へのアクセスは http://shunword.com/site/otheraction/5 へのアクセスと同様になる。これらのURLは共存するので、設定後も双方のURLで同じようにアクセスできる。

設定後、 CHtml::link で生成するURL等は自動的に省略されたURLになる模様。

ただし、ページ上部のメインメニューリストである zii.widgets.CMenu がうまく対応させられない。リンクを変更すると、選択時にアクティブかどうかの判定をうまくできないようだ。この辺は、追って調べていく予定。とりあえず、zii.widgets.CMenu のみ省略されていないURLを使うことにしている。


Yiiで日付時刻を日本時間にする。

デフォルトだとGMT時間になっているので、設定ファイルにタイムゾーンを追記する。

/protected/config/main.php

return array(
	'basePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..',
	'name'=>'My Wep App',
	'timeZone'=>'Asia/Tokyo',

これで CTimestamp::formatDate などを利用するときに日本時間になる。


Yiiでサードパーティ製ライブラリを使う

ファイルを置く場所は /protected/vendors

たとえば、SiteController内でPHP Simple HTML DOM Parserを利用するなら、

1
2
3
4
5
6
7
8
9
10
11
<?php
 
Yii::import('application.vendors.*');
require_once('simple_html_dom.php');
 
class SiteController extends Controller
{
	/**
	 * Declares class-based actions.
	 */
	public function actions()

という感じになる。


giiの有効化とURLを短く。

- 初めてのYiiアプリケーションの作成

まずは上を参考にYiiアプリケーションのディレクトリを作成する。ちなみに環境はXAMPP。Yiiをhtdocs以下に解凍し、できたディレクトリの長ったらしい名前をYiiに変更後、

cd C:\xampp\htdocs
 
C:\xampp\htdocs\php\php.exe C:\xampp\htdocs\yii\framework/yiic.php webapp testdrive

って感じ。パス通すのがめんどくさいので、フルパス。

/protected/config/main.php

	'modules'=>array(
		// uncomment the following to enable the Gii tool
		'gii'=>array(
			'class'=>'system.gii.GiiModule',
			'password'=>'Enter Your Password Here',
		 	// If removed, Gii defaults to localhost only. Edit carefully to taste.
			'ipFilters'=>array('127.0.0.1','::1'),
		),
	),

コメントを外し、giiを有効化。

- URLの取り扱い

長いURLを極力短く。上のページの指示通りにする。

/protected/config/main.php

	'urlManager'=>array(
		'urlFormat'=>'path',
		'showScriptName'=>false,
		'rules'=>array(
			'<controller:\w+>/<id:\d+>'=>'<controller>/view',
			'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
			'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
		),
	),

コメントを外し、’showScriptName’の行を追加。

/.htaccess

RewriteEngine on
 
# ディレクトリまたはファイルが存在する場合は、それを直接に使う
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
 
# それ以外は index.php に転送する
RewriteRule . index.php

webルートに.htaccess追加。これでURLがスッキリする。


まずはYiiの日本語化

PHPフレームワークのYiiを使ってみたら思いの外良かったんでいろいろメモ書き。

まずは日本語化。

/protected/config/main.php

'language'=>'ja',

テーブルプレフィクスの追加。基本的には追加しなくても困らないが、Yii-userとか使うなら必須。

'db'=>array(
 
    'tablePrefix' => 'tbl_',
),

このあと、Twitterなんかと連携したものをYiiで作ってみたいと思う。