usisan Blog http://usisan.net/blog WEBと写真と日常のこと Wed, 04 Jun 2014 11:04:34 +0000 ja hourly 1 http://wordpress.org/?v=3.8.3 ちょっとしたWeb制作でよく使う.htaccessの記述まとめ http://usisan.net/blog/archives/356 http://usisan.net/blog/archives/356#comments Wed, 21 May 2014 01:51:45 +0000 http://usisan.net/blog/?p=356 ちょっとしたWeb制作でよく使う.htaccessの記述を、すぐにコピペできるようまとめます.

.htaccessやmod_rewriteに関する詳細はApacheの公式ドキュメントを参照してください.

目次

 

.htaccess自体へのアクセスを拒否

「.ht」から始まるファイルへのアクセスを拒否します.

<Files ~ "^\.ht">
deny from all
</Files>

「"」で囲まれた部分に正規表現が使用できるので、任意のファイルへのアクセスを拒否することができます.

 

ファイル一覧を表示させない

index.htmlなどが存在しない場合にディレクトリの内容を表示させないようにします.

Options -Indexes

または次のようにします.

IndexIgnore *

 

特定のホスト/IPからのアクセスを拒否

example.comまたは000.000.000.000からのアクセスを拒否します.

order allow,deny
allow from all
deny from example.com
deny from 000.000.000.000

example.comまたは000.000.000.000からのアクセスのみを許可するには全ての「allow」と「deny」を逆にしてください.

 

永久的なリダイレクト

/foo/以下をhttp://example.com/へ永久的な変更としてリダイレクトします(サイトの引っ越しなど).

Redirect permanent /foo/ http://example.com/

 

基本的なリライト

/foo
へのアクセスで
/what_is_the_meaning_of_life.php
の内容を返します.

RewriteEngine On
RewriteRule ^foo$ what_is_the_meaning_of_life.php [QSA,L]

 

静的URIで動的URIのコンテンツへアクセスする

/page-123.html
へのアクセスで
/page.php?id=123
の内容を返します.

RewriteEngine On
RewriteRule ^page-([0-9]+).html$ page.php?id=$1 [QSA,L]

RewriteRuleの第1引数には正規表現が使用でき、括弧()で囲んだ部分は後方参照として第2引数へ引き継がれ、$1, $2, $3..のようにして利用することができます.

 

特定のURIでのアクセスに対して404を返す

http://example.com/でのアクセスに対して404を返します.

RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com
RewriteRule ^(.*)$ - [R=404,L]

 

www無しに統一

http://www.example.com/
へのアクセスを
http://example.com/
へ301リダイレクトします.

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.example\.com
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]

 

index.html(.php)無しに統一

http://example.com/foo/index.html
へのアクセスを
http://example.com/foo/
へ301リダイレクトします.

RewriteEngine On
RewriteCond %{THE_REQUEST} ^(.*)/index\.(html|php)
RewriteRule ^(.*)index\.(html|php)$ http://example.com/$1 [R=301,L]

 

デフォルトのエラーページを変更

ErrorDocument 403 /your_403_error_page.html
ErrorDocument 404 /your_404_error_page.html
ErrorDocument 500 /your_500_error_page.html

 

以上です.

]]>
http://usisan.net/blog/archives/356/feed 0
WordPress管理画面に独立したカスタムメニューを追加する http://usisan.net/blog/archives/352 http://usisan.net/blog/archives/352#comments Sat, 17 May 2014 03:04:25 +0000 http://usisan.net/blog/?p=352 WordPressで構築したサイトについて、その一部分、例えば「今日の一言」みたいなコンテンツを管理画面から更新したいというようなことは多いと思います.

すべての「今日の一言」を保存しておきたいのならカスタム投稿などを使えば良いと思いますが、今回は管理画面のメニューに独立したページとして設定画面を作成してみます.

 

↑このあたりに追加します.

 

以下のコードをfunctions.phpなりに記述してください.

if( is_admin() && is_user_logged_in() ){

	// 設定画面におけるコンテンツ部分のhtmlを出力する
	function my_little_setting_html(){
		$html .= <<< EOD
			<div class="wrap">
				<h2>ちょっとした設定</h2>
				<form action="" method="post">
					<div>
						<h3>今日の一言</h3>
						<div><textarea style="width:60%;height:160px;" name="word_of_day"></textarea></div>
					</div>
					<div style="margin:16px 0 0 0;">
						<input type="submit" value="更新" class="button button-primary" />
					</div>
				</form>
			</div>
EOD;
		echo $html;
	}

	// 管理画面のサイドメニューにオリジナルの項目を追加する
	function add_my_little_setting_custom_menu(){
		add_menu_page('ちょっとした設定', 'ちょっとした設定', 'edit_posts', 'menu_my_little_setting', 'my_little_setting_html');
	}

	// add_menu_page()をadmin_menuにフックする
	add_action('admin_menu', 'add_my_little_setting_custom_menu');
}

 

さて、実はこれだけで設定ページは追加されました.

 

アクセスしてみるとこんな感じです.

※更新はまだできません.

 

コードの解説

管理画面メニューにオリジナルのカスタムメニューを追加するにはadd_menu_page()を使用します.

Function Reference/add menu page « WordPress Codex

この記事の執筆時点(14/05/17, wp最新:3.9.1)において、日本語版のWordPress Codexの該当ページは古くなっていますので、英語版を参照してください(引数が違っていたりします).

 

正しい使用法はこのようになります.

<?php add_menu_page( $page_title, $menu_title, $capability, $menu_slug, $function, $icon_url, $position ); ?>
$page_title
(string) ページのタイトル. titleタグなどに使用される.
$menu_title
(string) メニューのタイトル. (通常左側の)メニューに表示される.
$capability
(string) カスタムメニューにアクセス可能なユーザー権限. ユーザーレベルは非推奨あり、ここに使用するべきではない.
$menu_slug
(string) ユニークなメニューのスラッグ. 他と被らなければ任意の文字列で良い.
$function
(string) カスタムメニューページのコンテンツを表示する関数の名前. 上の例で言う"my_little_setting_html".
$icon_url
(string) メニューのアイコン. オリジナルの画像やDashiconsを利用可能.
$position
(integer) メニューの表示位置.

 

なおadd_menu_page()は、内部でadd_menu_page()を実行する任意の関数をadmin_menuにフックして使用します.

<?php add_action('admin_menu', 'add_my_little_setting_custom_menu'); ?>

 

「今日の一言」を更新できるようにする

上に書いたものだけでは、「設定するためのページを作っただけ」ですから、ちゃんと動くようにしてみましょう.

今回のような、ちょっとしたものをWordPressに保存しておきたい場合には、update_option() / get_option()が便利です.

Function Reference/update option « WordPress Codex
Function Reference/get option « WordPress Codex

 

update_option()はサイトオプションを更新するための関数です.

通常は「管理画面 > 設定 > 一般」などにおいてサイト名やサイトの説明などのオプション更新に使用されていますが、独自のオプション情報を保存することもできます.

使い方はこのようになります.

<?php update_option( $key, $value ); ?>

オプション情報はkey-valueの形で保存されます.

$keyには他と被らない任意の文字列, $valueにはそのキーで保存する値(配列も可能)を渡してください.

 

オプション情報を更新する仕組みを組み込んだものが以下です(コード全文).

if( is_admin() && is_user_logged_in() ){

	// menu_my_little_settingによるオプション情報の更新
	if( !empty($_POST['from_my_little_setting_html']) && current_user_can('edit_posts') ){
		if( isset($_POST['for_word_of_day']) ){
			update_option('word_of_day', $_POST['for_word_of_day']);// 保存
		}
	}

	// menu_my_little_settingのコンテンツを出力
	function my_little_setting_html(){
		$func = __FUNCTION__;
		$wod = get_option('word_of_day');// 読み込み
		$html .= <<< EOD
			<div class="wrap">
				<h2>ちょっとした設定</h2>
				<form action="" method="post">
					<div>
						<h3>今日の一言</h3>
						<div><textarea style="width:60%;height:160px;" name="for_word_of_day">{$wod}</textarea></div>
					</div>
					<div style="margin:16px 0 0 0;">
						<input type="hidden" name="from_{$func}" value="1" />
						<input type="submit" value="更新" class="button button-primary" />
					</div>
				</form>
			</div>
EOD;
		echo $html;
	}

	// カスタムメニューを登録
	function add_my_little_setting_custom_menu(){
		add_menu_page('ちょっとした設定', 'ちょっとした設定', 'edit_posts', 'menu_my_little_setting', 'my_little_setting_html');
	}
	add_action('admin_menu', 'add_my_little_setting_custom_menu');
}

 

コードの解説

はじめのコードから、追加した点は以下の2つです.

  • オプション情報の更新処理
  • コンテンツの出力関数内で、オプション情報の取得と、更新処理に向けたフォーム項目の追加

current_user_can()の引数にはadd_menu_page()で指定したユーザー権限と同じものを設定するようにしてください.

 

以上になります.

快適なWordPressでよい週末を!

]]>
http://usisan.net/blog/archives/352/feed 0
野鳥に存分にもてあそばれてきました http://usisan.net/blog/archives/345 http://usisan.net/blog/archives/345#comments Wed, 14 May 2014 08:26:53 +0000 http://usisan.net/blog/?p=345 たぶん5kmくらい逃げる→追う→逃げる→追うしてました.]]> http://usisan.net/blog/archives/345/feed 0 気づいた人の責任 http://usisan.net/blog/archives/340 http://usisan.net/blog/archives/340#comments Sun, 04 May 2014 07:50:11 +0000 http://usisan.net/blog/?p=340 牛「もーもーもー.」   気づいた人がやれば良い. というか、気づいてしまったのなら責任を取るべきだ. これは何もトイレットペーパーの交換に限ったことではない.   先日そんなツイートをしました. 僕はそのうちブログに書いてもいいなあと思ったことをまずtwitterに投稿してみます. 別に意味はありません☆ミ   さて、気づいた人の責任について. トイレットペーパーは身近でわかりやすい例です. 自分が使い切ったわけではないが、トイレットペーパーが無くなっているのに気づいてしまったという場合. 次の2通りのアクションを選択できます. トイレットペーパーを交換
  • する
  • しない
選択できるんですが、「しない」を選んだ場合、世界に悪影響を及ぼします. 自分が交換しなかったばっかりに、本来する必要のなかった誰かがトイレットペーパーを交換しなくてはならないからです.   トイレットペーパーから大幅にスケールアップすると、 1日に平均約2億5000万人を死に至らせる病気が自分とは関係ない場所で猛威をふるっているとして、 そのとんでもない病気に対する特効薬の構造と製造方法を思いついてしまった場合. 同じく次の2通りのアクションを選択できます. トイレットペーパーを交換
  • する
  • しない
ではなくて、 特効薬を製造
  • する
  • しない
選択できるんですが、「しない」を選んだ場合、世界に悪影響を及ぼします. 自分が製造しなかったばっかりに、1日に平均約2億5000万人の本来死ぬ必要のなかった誰かが命を落とし続けるからです.   といっても、自分が行動するのはなかなか勇気がいりますよね. なにより大変だし、評価だってされない可能性がある. 自分にしか「1日に平均約2億5000万人を死に至らせる病気」の特効薬を作ることはできないと思い込んで、大切なものを全て投げ捨て自己犠牲を極めたとしても、実は大手製薬会社が難なく完成させてしまうかもしれません. これは第三者から見れば、勝手に勘違いして滅んでいっただけ、ですからね.   なんですけど、誰かが行動しなかったら解決することはないんです. つまらないことを恐れて何もしないのは、勘違い野郎よりもかっこ悪いんじゃないですか?   僕はそうは思いません. やっぱり勘違い野郎の方がかっこ悪い. 体裁大事. お昼寝しよっと.]]>
http://usisan.net/blog/archives/340/feed 0
毎週毎週、週末になっては料理を作る http://usisan.net/blog/archives/338 http://usisan.net/blog/archives/338#comments Sun, 04 May 2014 05:04:46 +0000 http://usisan.net/blog/?p=338 シュウマイ!   昔は大学にも手作りのお弁当を持って行っていた時期があるくらいで(2回程度)、割とよく作っていたような気がするんですが、最近はめっきり、朝昼晩とセブンイレブンに依存する形になってしまっています. つまり現状、僕の100%はセブンイレブンであるということに違いないですから、 最近僕と会話をした人も実際はセブンイレブンと会話をしていたということですし、僕がこうして書いているブログもセブンイレブンによって書かれたということになります. このままではいけないと思ったので、自分を取り戻すべく、きゃりーぱみゅぱみゅではないですが、「100%の自分に」戻るべく、「100%のセブン」から「100%の自分」に戻るべく、週末オンリーなんですが、戦っていこうと決めました.   ということで今日のお昼に作ったのがこちらの「鶏ムネ肉とネギをごま油で炒めた後でマヨネーズとケチャップをあえてネギをちらしたもの」になります.   ところで料理を作るって意外とメリットがたくさんあるんですよ. まず料理を作るということ自体が人間力の保持, 向上に繋がっていますし、それから完成したお弁当を買うのと違って保存料をはじめとする食品添加物の摂取が間違いなく少なくなるでしょうから、健康にも良さそうです. さらに完成した料理の写真をおいしそうに撮る努力をする機会が与えられるというのが良くて、 料理って写真を撮る人からすると一般的に難しいとされていて、料理をおいしそうに撮ることができるようになったら一人前と言われるくらいなので、料理と一緒に写真の腕も磨くことができるのです. で、上手に撮れた写真をSNSに投稿すれば自分に対する家庭的なイメージを簡単に植え付けることができる. まさに良いこと尽くめ.]]> http://usisan.net/blog/archives/338/feed 0 リングイン http://usisan.net/blog/archives/331 http://usisan.net/blog/archives/331#comments Wed, 16 Apr 2014 05:32:08 +0000 http://usisan.net/blog/?p=331 http://usisan.net/blog/archives/331/feed 0 Curator向けのブックマークレットを作りました http://usisan.net/blog/archives/327 http://usisan.net/blog/archives/327#comments Fri, 11 Apr 2014 12:55:10 +0000 http://usisan.net/blog/?p=327 開発者ブログ的な公式の情報を発信する場所がないので開発者「の」ブログに掲載します.

先日公開した世界一面白くないWEBサービスことCuratorに関してですが、

ありがたいことに「ブックマークレットが用意されていなくて不便だ」というご意見をたくさんいただいたので、

簡易的なものですが、ブックマークレットを作りました.

javascript:(function(){var%20u=[ユーザーID],w=window,d=w.document,l=w.location.href;w.open('https://crtr.jp/user/'+u+'?mode=post&post_url='+l);})();

以上のスクリプトをコピーして、ブラウザのブックマークのurlに設定してお使いください.

その際「[ユーザーID]」の部分は、ユーザーページのurlに含まれている16桁のID(数字)に置き換えてください.
例えば自分のページのurlが「https://crtr.jp/user/3602851018279402」であれば「3602851018279402」です.

ブックマークレットの詳しい使い方は「ブックマークレット 使い方」で検索してください.

]]>
http://usisan.net/blog/archives/327/feed 0
世界一面白くないWEBサービス「Curator」をリリースしました http://usisan.net/blog/archives/321 http://usisan.net/blog/archives/321#comments Mon, 07 Apr 2014 22:05:35 +0000 http://usisan.net/blog/?p=321 本日、インターネット上のコンテンツへコメントを付加して発信することができるサービス「Curator」(キュレーター)をリリースしました. わっしょーい! URL: https://crtr.jp/ 今年のお正月あたりからこっそりと開発を進めてきたものです. 独学かつ個人で開発をしているため、これまで数多くの困難にぶち当たってはその度に絶望してきましたが、今日こうしてなんとかリリースすることができ、嬉しく思います. 技術関連の情報をインターネットで公開されている方々には感謝します.  

Curatorとは

シンプルなキュレーションツールです. 「キュレーション」とは、情報を収集し整理したり他の情報と合わたりすることで、新しい価値を持たせ共有することであり、 Curatorでは、インターネット上のコンテンツへコメントを付加して発信することができます. 「URL-コメント」という形式の投稿(「キュレーション」と呼びます)に特化したサービスで、インターネット上のコンテンツに対して感じたことや思ったことを投稿, ストックすることができます. 「インターネットにコメントしよう」 - Curatorについて   スクエア」ではログインしていなくても人気/新着のキュレーションを見ることができます.  

コンセプト

Curatorは「『考えること』を通して毎日をもっと面白く」というコンセプトで作られました.

毎日をもっと面白く!

「考えること」は誤解されがちですが、本来とても楽しい行為です. どんなに忙しい人も、毎日少しの時間、意識的に何かについて考えてみてはいかがでしょうか. インターネット上の話題なら、Curatorがお供します.
引用: Curatorについて   「考えること」だけでなく、運動など人間に本来備わっている能力を発揮することは、生き物としての喜び?を感じられる楽しい行為だと思います. 運動でも、人と比べるから「苦手」なんて思うわけで、例えば地球上に自分しか存在しないような状況だったら、走り回るでもジャンプしまくるでも右ひじを左右にブンブン振り回すでも、体を動かすことは楽しいと感じるはずです. 「どんなに忙しい人も、毎日少しの時間、意識的に何かについて考えてみてはいかがでしょうか」. Curatorはそんな提案をします.  

ところで、何が「世界一面白くない」のか

上のコンセプトからもひしひしと伝わってきたかもしれませんが、 サービス自体は、大部分の人にとって世界一面白くないに違いないと思っています. その最も大きな理由は、ユーザーが楽しいと感じる仕組みを持っていないこと. ですかね. Curatorでは、友達と繋がってコミュニケーションをとることも、今朝食べたおしゃれな朝食の写真をアップロードすることもできません. ただ、何かを考えて、それを残しておける場所を提供しているだけなのです. 意識して自分のために使うという意味では、ToDoリストや健康管理アプリに似たものがあるのかも知れません.  

それでは、どうぞご利用ください

Curator - インターネットにコメントしよう 利用はもちろん無料です. FacebookまたはTwitterのアカウントを使ってログインができるので、メールアドレスの入力など、面倒な登録作業は一切必要ありません. また、開発者自身が様々なサービスについて思うことから、Curatorでは退会が簡単にできることにもこだわっています. よろしくお願いします.  

4/16追記

リリース後、ITmedia様に最も理想的な形でCuratorを取り上げていただきました. ネット上のコンテンツをコメント付きで記録 “世界一面白くない”キュレーションサービス「Curator」 - ITmedia ニュース この記事はYahoo!ニュースにも転載され、翌日Gunosyで配信されるなどしました. その結果、現在はすっかり落ち着いていますが、250を超えるユーザーの方に登録していただくことができました. また、開発者よりも先にブックマークレットのスクリプトを公開してくれた方や、使用レポートを書いてくれた方もいらっしゃるようです. みなさん、このような面白くないサービスにお付き合いいただき、ありがとうございます.]]>
http://usisan.net/blog/archives/321/feed 0