2010年11月26日金曜日

apacheのrewriteでドメイン変更に対応する

どうも、俺@仕事中です。

今日はタイトルの通り、apacheのmod_rewriteを使ってサイトのドメイン変更に対応する方法についてメモめも。
さらにそのサイトは「*(ワイルドカード)」によるサブドメイン設定がされておりその対応もしなければなりません。

ドメインは
old.jp → new.jp に変更するものとします。
DNSゾーン設定は以下のような感じで
1.2.3.4は仮のサーバIPのつもり
@ IN A 1.2.3.4
* IN A 1.2.3.4


つまり
old.jpでアクセスのあったものはnew.jpにリライトし
foo.old.jpでアクセスのあったものはfoo.new.jpにリライトしたいのです。

apacheのRewriteモジュールはインストールしておいてね。


では設定方法について
# vim /usr/local/apache2/conf/httpd.conf
--------------------------------------------
1 RewriteEngine On
2 Rewrite Cond %{HTTP_HOST} ^(.*)old\.jp [NC]
3 RewriteRule ^(.*)$ http://%1new.jp$1 [R=301,L]
これでapache再起動でOKです。
正規表現はかなり適当なので実運用する場合はも少し丁寧に書いたほうが良いと思います。

ポイントは3行目の
^(.*)$ http://%1new.jp$1
の部分です。
「%1」は2行目のRewriteCondeで設定した正規表現の文字グループを後方参照する場合に使えます。
もちろん複数ある場合は %2,%3..とつづきます。

これで完成ーばんざあぁぁぁぁぁあぃ!

2010年11月11日木曜日

manコマンドで文字化け回避

どうも、俺@仕事中です。

今日はmanページを日本語環境で表示させた場合に文字化けしてしまう場合の対処法めもです。
たぶんmanページが文字化けする以外のシチュエーションでも使えそうな気がします。

例えば
$ locale
LANG=C
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=
のような環境で
$ man less
LESS(1)

NAME
less - opposite of more

SYNOPSIS
less -?
less --help
less -V
less --version
less [-[+]aBcCdeEfFgGiIJLmMnNqQrRsSuUVwWX~]
[-b space] [-h lines] [-j line] [-k keyfile]
--- 以下略 ---
のようにまず問題なく表示されます。
ところが
$ locale
LANG=ja_JP.utf8
LC_CTYPE="ja_JP.utf8"
LC_NUMERIC="ja_JP.utf8"
LC_TIME="ja_JP.utf8"
LC_COLLATE="ja_JP.utf8"
LC_MONETARY="ja_JP.utf8"
LC_MESSAGES="ja_JP.utf8"
LC_PAPER="ja_JP.utf8"
LC_NAME="ja_JP.utf8"
LC_ADDRESS="ja_JP.utf8"
LC_TELEPHONE="ja_JP.utf8"
LC_MEASUREMENT="ja_JP.utf8"
LC_IDENTIFICATION="ja_JP.utf8"
LC_ALL=
のような場合にmanを見ると
$ man less
LESS(1)

<E5><ux><8D><E5><89><8D>
less - more <E3><81><AE><E5><8F><8D><E5><AF><BE> (more <E3><81><AE><E3><82><88><E3><81><86><E3><81><AA><E3><83><9A><E3><83><BC><E3><82><B8><E3><83><A3><E3><83><BC>)

<E6><9B><B8><E5><BC><8F>
less -?
less --help
less -V
less --version
--- 以下略 ---
のようになる場合があります。

こんな時は
$ export PAGER="less -irs"
とするかログインシェルの .xxrcファイルに設定しておけば万事解決です!


以上どえぇぇっぇぇす。

2010年11月5日金曜日

オデの.screenrc

どうも、俺@会議前です。

今日は出張先でも迷わないように、.screenrcの最低限の設定めもです。

$ vim ~/.screenrc
-----------------------------------
vbell off
hardstatus alwayslastline "[%02c] %`%-w%{=b bw}%n %t%{-}%+w" # 下部に表示するstatusline
stuff "export LANG=C"
encoding utf8 utf8 # 文字化け対策 utf8の場合
defencoding utf8
defkanji utf8
autodetach on # デタッチを自動
termcapinfo xterm* is=¥E[r¥E[m¥E[2J¥E[H¥E[?7h¥E[?1;4;6l # teratermなどでウィンドウサイズが変更されるのを防ぐ
とりあえずこれでなんとかなる!


以上どぇぇぇぇぇぇす。

2010年10月28日木曜日

svnで特定のファイル(やディレクトリ)を除外して管理する

どうも、俺@お昼ごはんでお腹いっぱいです。

今日はsvnコマンドで特定のファイルやディレクトリを除外する方法についてメモメモ。

例えば、
リポジトリ管理下の tmp/ というディレクトリを除外する場合。
$ svn propset svn:ignore /path/to/tmp
// または
$ svn propedit svn:ignore // ここでリターン
// SVN_EDITORで指定したエディタが開くので除外パターンを改行区切りで記述
/path/to/tmp
こんな感じです。

logsディレクトリ以下の*.logというファイルを除外する場合は
$ svn propset svn:ignore '*.log' /path/to/logs
// または
$ svn propedit svn:ignore /path/to/logs
// SVN_EDITORで指定したエディタが開くので除外パターンを改行区切りで記述
*.log
こんな感じです。


propsetはそのコマンドでパターンを指定する方法で
propeditは設定ファイルでパターンを指定する方法です。

以上でぇぇす。

2010年10月22日金曜日

svnでどんなに頑張っても"can't convert string from 'utf-8' to native encoding"エラーが治らない

どうも、俺@残業です。

svnコマンドでimport chekcout commit updateコマンドを打った時によく出るエラーで
Can't convert string from native encoding to 'UTF-8':
や
Valid UTF-8 data.
や
ネイティブのエンコーディングから'UTF-8'に文字列を変換できません
や
有効なUTF-8のデータ(16進数: )の後に無効なUTF-8文字列(16進数)
のようなエラーがあります。

だいたいの原因が、存在するファイルに日本語ファイル名のものがある場合に発生する事があるのですが、おそらくlinuxエンジニアはやらないのでwindowsで誰かが作ったファイルが存在していることだと思います。

大抵の場合は環境変数 LC_CTYPE= の設定で対応できます。
$ export LC_CTYPE=ja_JP.utf8


ja_JP.utf8なロケールが存在しない場合は(まずないと思いますが)
locale -a | grep ja
ja_JP
ja_JP.eucjp
ja_JP.sjis
ja_JP.ujis
japanese
japanese.euc
入れちゃいましょう。
# localedef -f UTF-8 -i ja_JP ja_JP.utf8


それでも同じエラーが出る場合は
$ export LC_ALL=ja_JP.utf8
やっちゃいましょう。

それでもエラーが出る場合は思い切って
$ export LC_CTYPE=ja_JP.sjis
をやってみてください。
ja_JP.sjisなロケールがない場合は
# localedef -f SJIS -i ja_JP ja_JP.sjis
で追加してください。

LC_CTYPE=ja_JP.sjisでやれば回避できることもあります。

最後の手段は
$ vim ~/.subversion/config
log-encoding=utf8
です。

これでもダメなら日本語ファイル名のファイルをsvn管理下から外してください!


以上どぇぇぇぇぇぇす。