waste of time

主にPHP

ConoHa(CentOS6.5)にxdebug入れる

# yum install php-pecl-xdebug
Loaded plugins: fastestmirror, priorities, security
Setting up Install Process
Loading mirror speeds from cached hostfile
 * base: ftp.tsukuba.wide.ad.jp
 * epel: ftp.kddilabs.jp
 * extras: ftp.tsukuba.wide.ad.jp
 * updates: ftp.tsukuba.wide.ad.jp
148 packages excluded due to repository priority protections
Resolving Dependencies
--> Running transaction check
---> Package php-pecl-xdebug.x86_64 0:2.1.4-1.el6 will be installed
--> Processing Dependency: php(zend-abi) = 20090626 for package: php-pecl-xdebug-2.1.4-1.el6.x86_64
--> Processing Dependency: php(api) = 20090626 for package: php-pecl-xdebug-2.1.4-1.el6.x86_64
--> Finished Dependency Resolution
Error: Package: php-pecl-xdebug-2.1.4-1.el6.x86_64 (epel)
           Requires: php(zend-abi) = 20090626
           Installed: php-common-5.5.18-1.el6.remi.x86_64 (@remi-php55)
               php(zend-abi) = 20121212-64
           Available: php-common-5.3.3-38.el6.x86_64 (base)
               php(zend-abi) = 20090626
           Available: php-common-5.3.3-40.el6_6.x86_64 (updates)
               php(zend-abi) = 20090626
Error: Package: php-pecl-xdebug-2.1.4-1.el6.x86_64 (epel)
           Requires: php(api) = 20090626
           Installed: php-common-5.5.18-1.el6.remi.x86_64 (@remi-php55)
               php(api) = 20121113-64
           Available: php-common-5.3.3-38.el6.x86_64 (base)
               php(api) = 20090626
           Available: php-common-5.3.3-40.el6_6.x86_64 (updates)
               php(api) = 20090626
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest

baseから入れようとするとエラー出るので、php5.5入れたとき同様remi-php55から入れる。

# yum -y install php-pecl-xdebug --enablerepo=remi-php55

Loaded plugins: fastestmirror, priorities, security
Setting up Install Process
Loading mirror speeds from cached hostfile
 * base: ftp.tsukuba.wide.ad.jp
 * epel: ftp.tsukuba.wide.ad.jp
 * extras: ftp.tsukuba.wide.ad.jp
 * remi-php55: remi.kazukioishi.net
 * updates: ftp.tsukuba.wide.ad.jp
285 packages excluded due to repository priority protections
Resolving Dependencies
--> Running transaction check
---> Package php-pecl-xdebug.x86_64 0:2.2.5-1.el6.remi.5.5 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

==================================================================================================================================
 Package                          Arch                    Version                               Repository                   Size
==================================================================================================================================
Installing:
 php-pecl-xdebug                  x86_64                  2.2.5-1.el6.remi.5.5                  remi-php55                  164 k

Transaction Summary
==================================================================================================================================
Install       1 Package(s)

Total download size: 164 k
Installed size: 560 k
Downloading Packages:
php-pecl-xdebug-2.2.5-1.el6.remi.5.5.x86_64.rpm                                                            | 164 kB     00:00
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : php-pecl-xdebug-2.2.5-1.el6.remi.5.5.x86_64                                                                    1/1
  Verifying  : php-pecl-xdebug-2.2.5-1.el6.remi.5.5.x86_64                                                                    1/1

Installed:
  php-pecl-xdebug.x86_64 0:2.2.5-1.el6.remi.5.5

Complete!
$ php -v

PHP 5.5.18 (cli) (built: Oct 16 2014 12:21:51)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
    with Xdebug v2.2.5, Copyright (c) 2002-2014, by Derick Rethans

ConoHaで環境構築③

ConoHaで環境構築① - 開発の備忘録的なやつ

ConoHaで環境構築② - 開発の備忘録的なやつ

remiリポジトリの追加

$ sudo rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
$ sudo yum install yum-plugin-priorities   ← リポジトリの優先順位を変更できるyum-plugin-prioritiesをインストール

$ sudo vim /etc/yum.repos.d/CentOS-Base.repo  ← 全てのリポジトリに`priority=2`を指定
$ sudo vim /etc/yum.repos.d/remi.repo         ← 全てのリポジトリに`priority=1`を指定

Apache

ConoHaではデフォルトでApacheが入っているので、有効化するだけ。

$ sudo service httpd start
$ sudo chkconfig httpd on

$ sudo vim /var/www/html/index.html   ← 表示確認用に適当に何か作ってみる。

ブラウザからアクセスして正常に表示されればOK。

続いてApacheのセキュリティ関連の設定を行う。

$ sudo vim /etc/httpd/conf/httpd.conf

ServerSignature Off       ← エラー画面にサーバ情報を表示しない。
ServerTokens ProductOnly  ← レスポンスヘッダーにサーバ情報を出力しない。
Header always append X-Frame-Options DENY   ← 最終行あたりに追加。クリックジャッキング対策。
TraceEnable Off           ← 最終行あたりに追加。Traceメソッドを無効化。


$ sudo service httpd restart

またhttpd.confでは、Options hoge IndexesのようにIndexesがあるとファイル一覧がブラウザで出力されてしまうので、Indexesというキーワードは全て削除する。

参考
Apache のバージョンや OS の情報を出力しないようにする
Apache のディレクトリリスティングを無効にする
クリックジャッキング対策(Apache/IIS)
Apache の Trace メソッドを無効にする

MySQL

$ sudo yum -y install mysql-server
$ sudo service mysqld start
$ sudo chkconfig mysqld on

$ mysqladmin -u root password パスワード   ← MySQLのrootパスワードを設定する。

phpMyAdmin

phpMyAdminのインストールにはphp-gdとImageMagick-lastが必要なので、先にそちらをインストールしておく。

$ sudo yum -y install --enablerepo=remi gd-last   // php-gd入れるのに必要
$ sudo yum -y install --enablerepo=remi-php55 php-gd
$ sudo yum -y install --enablerepo=remi ImageMagick-last
$ sudo yum -y install --enablerepo=remi-php55 phpMyAdmin

アクセス制限を切ってBASIC認証をかける。

$ sudo vim /etc/httpd/conf.d/phpMyAdmin.conf


<Directory /usr/share/phpMyAdmin/>
   <IfModule mod_authz_core.c>
     # Apache 2.4
     Require local
   </IfModule>
   <IfModule !mod_authz_core.c>
     # Apache 2.2
     #Order Deny,Allow
     #Deny from All
     #Allow from 127.0.0.1
     #Allow from ::1
   </IfModule>
</Directory>

<Directory /usr/share/phpMyAdmin/setup/>
   <IfModule mod_authz_core.c>
     # Apache 2.4
     Require local
   </IfModule>
   <IfModule !mod_authz_core.c>
     # Apache 2.2
     #Order Deny,Allow
     #Deny from All
     #Allow from 127.0.0.1
     #Allow from ::1
   </IfModule>
</Directory>
$ sudo htpasswd -c /usr/share/phpMyAdmin/.htpasswd ユーザ名

New password:
Re-type new password:
Adding password for user hoge
$ sudo vim /usr/share/phpMyAdmin/.htaccess


AuthUserFile /usr/share/phpMyAdmin/.htpasswd
AuthGroupFile /dev/null
AuthName "Secret"
AuthType Basic
require valid-user
<Files ~ "^.(htpasswd|htaccess)$">
        deny from all
</Files>

デフォルトではhtaccessが有効になっていないので、設定で有効にする。

$ sudo vim /etc/httpd/conf/httpd.conf


<Directory />
    Options FollowSymLinks
    AllowOverride All   ← NoneからAllに変更
</Directory>


$ sudo service httpd restart

参考:CentOSにPHP5.5とphpMyAdminをインストール

PHP

PHPはデフォルトで5.3.3が入っている。
PHP5.5を使いたいのでremi-php55リポジトリを使ってyum updateする。

$ sudo yum -y update --enablerepo=remi,remi-php55

だいたいこんなところか…
本格的に使いはじめるならこれに加えて独自ドメインの設定とかしないとあかんね。
今度はchefとかプロビジョニングツール使ってみたい。

ConoHaで環境構築②

ConoHaで環境構築① - 開発の備忘録的なやつ

ConoHaで環境構築③ - 開発の備忘録的なやつ

iptablesの設定

sshポートはあとで10022に変更します。

$ chkconfig iptables --list  ← 3:onになっているのを確認

$ sudo vim /etc/sysconfig/iptables

*filter
:INPUT   ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT  ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]

-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT     ← 念のため許可しておく。sshポート変更して10022で接続できたら削除。
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 10022 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80    -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443    -j ACCEPT

-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited

COMMIT


$ sudo service iptables restart

ip6tablesの設定

$ chkconfig ip6tables --list  ← 有効になってるか確認

$ sudo vim /etc/sysconfig/ip6tables

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmpv6 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 10022 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80    -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443   -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 546 --sport 547 -s fe80::/10 -d fe80::/10 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp6-adm-prohibited

-A FORWARD -j REJECT --reject-with icmp6-adm-prohibited
COMMIT


$ sudo service ip6tables restart

参考:ConoHa での Nginx + WordPress CentOSでの環境構築メモ

SSHのポート番号を変更

# vim /etc/ssh/sshd_config

Port 10022  ← コメントアウト解除して22から10022に変更


# service sshd restart

10022ポートでSSH接続できるのを確認したら、iptables設定の22ポート許可設定を削除する。(削除後のiptablesリスタート忘れずに)

ntpの設定

$ chkconfig ntpd --list   ← 有効になってるか確認
$ sudo vim /etc/ntp.conf

#server 0.centos.pool.ntp.org iburst   ← デフォルト設定をコメントアウトしてntp.nict.jpを新しく追加
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server -4 ntp.nict.jp
server -4 ntp1.jst.mfeed.ad.jp
server -4 ntp2.jst.mfeed.ad.jp
server -4 ntp3.jst.mfeed.ad.jp


$ sudo service ntpd restart

nkfとjumanのインストール

開発しているシステムで使うので。

$ sudo yum -y install nkf

jumanはここからVer.6.0をダウンロードしてWinSCP/home/tmysz/usr/local/src/jumanに転送。

$ cd /home/tmysz/usr/local/src/juman
$ tar xvzf juman-6.01.tar.gz
$ ./configure --prefix=/home/tmysz/usr/local   ← prefixでインストール場所を指定。デフォルトでは/usr/local。成功すればMakefileが生成される。
$ make
$ make install    ← /home/tmysz/usr/local/binにインストールされる。

$ cd /home/tmysz/usr/local/bin
$ ./juman -v

juman 6.01

パスが通っていないので、/home/tmysz/usr/local/binにパスを通す。

$ cd ~/
$ vim .bash_profile

PATH=$PATH:$HOME/bin:$HOME/usr/local/bin  ← :$HOME/usr/local/binを追加
export PATH

再ログインしてパスが通っているのを確認。

追記:全ユーザで使いたいので、~/.bash_profileに書いたの削除して/etc/profileに書き直した。

$ sudo vim /etc/profile

PATH=$PATH:/home/tmysz/usr/local/bin
export PATH

ConoHaで環境構築①

ConoHa試用中です。

ConoHaでは、SSH経由シリアルコンソール接続するための秘密鍵が用意されているので、それをConoHaコンパネからダウンロードしてシリアルコンソールに接続する。 あくまでシリアルコンソール接続のための秘密鍵なので注意。 SSH接続用に使う公開鍵・秘密鍵は以下作業の中で自分で作ります。

作業ユーザの作成

# useradd tmysz
# passwd tmysz

wheelグループのみrootになれるようにする

# vim /etc/pam.d/su

auth required pam_wheel.so use_uid   ← コメントアウト解除


# vim /etc/login.defs

SU_WHEEL_ONLY yes  ← 追加


# visudo

%wheel ALL=(ALL) ALL  ← コメントアウト解除。sudoの度にパスワード要求する。

作成した作業ユーザをwheelグループに追加する

# usermod -G wheel tmysz

以降の作業は作業ユーザでログインしなおして行う。

公開鍵認証の準備

$ ssh-keygen -t rsa -b 2048

Generating public/private rsa key pair.
Enter file in which to save the key (/home/tmysz/.ssh/id_rsa):  ← キーを保存する場所。今回はデフォルトのまま。
Enter passphrase (empty for no passphrase):  ← キーフレーズ入力
Enter same passphrase again:                 ← キーフレーズ再入力
Your identification has been saved in /home/tmysz/.ssh/id_rsa.
Your public key has been saved in /home/tmysz/.ssh/id_rsa.pub.
The key fingerprint is:
The key's randomart image is:


$ mv /home/tmysz/.ssh/id_rsa.pub /home/tmysz/.ssh/authorized_keys   ← 公開鍵のファイル名を変更

$ sudo vim /etc/ssh/sshd_config

PubkeyAuthentication yes  ← コメントアウト解除


$ sudo service sshd restart

生成された秘密鍵をローカルに(セキュアな方法で)ダウンロードして使う。(Windows+TeraTerm使うのでPuttygenで変換)

rootでSSHログイン出来ないようにする&パスワード認証無効化

$ sudo vim /etc/ssh/sshd_config

PermitRootLogin no         ← コメントアウト解除
PasswordAuthentication no  ← ConoHaではデフォルトでno


$ sudo service sshd restart

sshdリスタート後にrootでsshログインできなくなっていることを確認&作業ユーザでsshログイン出来る事を確認。

パッケージのアップデート

$ sudo yum -y update

ConoHaで環境構築② - 開発の備忘録的なやつ

ConoHaで環境構築③ - 開発の備忘録的なやつ

Sublime text3に入れてるパッケージとか設定とか

前にも同じような記事を書きましたが、転職して職場環境も開発環境も新しくリフレッシュしたのでSublime textのパッケージも今一度見直してみることにしました。
パッケージの内容は前回の記事とほぼほぼ同じだと思いますが、今回はそれに加えて現在の設定ファイルの記述も備忘録として残しておこうと思います。

Package Control: List Packages

AutoFileName

ファイル名などを自動補完。

BracketHighlighter

タグの開始終了をハイライト。

CSS Snippets

CSSスニペット集。

DocBlockr

関数のコメントを自動生成。

ConvertToUTF8

2014/10/18 追記
すごい重要なパッケージ書き忘れてました。
Sublime textはShiftJISやEUCといった日本語文字コードファイルに対応しておらず、ファイルを開くと文字化けしてしまいます。
ConvertToUTF8は、ShiftJISやEUCのファイルを開くときにUTF8に自動変換することで文字化けを回避することが出来ます。
編集が終わって保存するときはまたShiftJISやEUCに自動変換してくれます。
業務ではいまだにShiftJISやEUCのファイルを扱うことが少なくないので、仕事する上では必須のパッケージになってます。

Emmet

Zen-Codingの後見。

GotoDocumentation

PHPの関数の上でF1(キーバインドで設定)押すとphp.netの該当ページに飛ぶ。

HTML5

HTML5の自動補完。

IMESupport

日本語のインライン入力サポート。

JS Snippets

JSのスニペット集。ほとんどJS書かないけど。

MarkdownEditing

Markdownのハイライト表示。

OmniMarkupPreviewer

Markdownをブラウザでプレビュー。

Package Control

パッケージの管理をしてくれる必須パッケージ。Sublime textインストールした後に最初に入れるもの。
パッケージのインストール・削除・有効無効化もPackageControlから行う。
ここから3or2のコードをコピペしてSublime textでCtrl+`押して(若しくはView→Show Console)貼り付ければインストールできる。

SFTP

名前の通りSFTPでファイルアップロード・ダウンロード・比較できる。
ライセンス購入済み。

SideBarEnhancements

サイドバーメニュー拡張。

Sublime Tweet

Sublime textからツイートできるようになる。
ネタで入れたけど実際ほぼ使ってない。

SublimeCodeIntel

自作関数・変数・定数にカーソルを置いた状態でCtrl+Win+Alt+↑(Windowsの場合)で宣言元にジャンプする。
Ctrl+Win+Alt+←で元の場所に戻る。
Sublime text3から新機能としてGotoDefinitionという同じようなことができる機能が標準で実装されていますが、GotoDefinitionは変数や定数には対応していないので専らSublimeCodeIntelの方を使っています。

SublimeLinter

構文エラーをリアルタイムでチェックして表示する。
これ単体ではエラーを表示する機能しか持っていないため、言語ごとにLinterパッケージを入れる必要があります。

SublimeLinter-php

PHPの構文エラーをリアルタイムでチェックする。
PCにPHPがインストールされていて且つパスが通っている必要がある。XAMPPのPHPをそのまま使ってます。

ちなみにPackageControlでSublimeLinter-phpを検索すると似たような名前のパッケージがいくつか出てきます。

  • SublimeLinter-php
    PHPの構文エラーを指摘してくれる。PHPのインストールが必要。
  • SublimeLinter-phpcs
    PSR2などのコーディング規約に違反している箇所をチェックしてくれる。PHPCSのインストールが必要。
  • SublimeLinter-phplint
    詳しくはわからないけどPHPソースのバリデーター。PHPLintのインストールが必要。
  • SublimeLinter-phpmd
    不必要な変数宣言や長すぎる名前・行を指摘してくれる。PHPMDのインストールが必要。

参考
WindowsでPHPMDやPHPCSを入れてSublimeLinterでLintする - MANA-DOT

Sublimerge Pro

差分比較。

Theme - Flatland

itg.flatから乗り換え。

Preferences: Settings - User

{
    "theme": "Flatland Dark.sublime-theme",
    "color_scheme": "Packages/User/Flatland Monokai (SL).tmTheme",
    "flatland_square_tabs": false,           // テーマの設定。タブをスクエア表示しない。
    "enable_tab_scrolling": false,           // タブのスクロール表示しない
    "font_size": 10,                         // フォントサイズ
    "tab_size": 4,                           // タブのスペース文字数
    "translate_tabs_to_spaces": true,        // タブをスペースに変換
    "show_encoding": true,                   // 文字コードをステータスバーに表示
    "show_line_endings": true,               // 改行コードをステータスバーに表示
    "default_encoding": "UTF-8",             // デフォルト文字コード
    "fallback_encoding": "Shift-JIS",        // 文字コード判別できない場合の指定エンコード
    "default_line_ending": "unix",           // デフォルト改行コード(windows=CRLF, unix=LF)
    "highlight_line": true,                  // カーソルがある行をハイライト表示
    "highlight_modified_tabs": true,         // 未保存のタブをハイライト表示
    "draw_minimap_border": true,             // ミニマップの現在位置をボーダーで囲む
    "close_windows_when_empty": false,       // タブ全部閉じてもウィンドウ閉じないようにする
}

Preferences: Key Bindings - User

[
    { "keys": ["ctrl+shift+t"], "command": "tweet" },
    { "keys": ["ctrl+shift+c"], "command": "read_tweets" },
    { "keys": ["ctrl+alt+u"], "command": "sftp_upload_file" },
    { "keys": ["f1"], "command": "goto_documentation" },
    { "keys": ["f12"], "command": "goto_definition" },
    { "keys": ["alt+left"], "command": "jump_back" },
    { "keys": ["alt+right"], "command": "jump_forward" },
]

Gitの用語メモ

普段の業務ではSVNでソース管理しているのですが、最近個人的な開発(と呼べるほどのことはしていませんが)でBitbucket/SourceTreeを使って今更ながらGitを触り始めました。
SVNを使っていたと言っても基本的にはチェックアウト・更新・コミットをするくらいで、掘り下げた使い方はあまりしたことがありません。
そんなこんなでGitを使い始めたところ、新しい用語や概念が出てきて混乱したので、使う上で最低限の用語をメモしておきました。
うまくまとまってないし用語解釈がおかしいところがあると思う…

概念的な用語

リモートリポジトリ

みんなが使う共有リポジトリ

ローカルリポジトリ

自分専用のリポジトリ

インデックス

変更したファイルをローカルリポジトリにコミットするために、まずはインデックスに追加する必要がある。

実作業で使う用語

クローン

既存のリモートリポジトリからローカルにプロジェクトをコピーしてくる。(作業ディレクトリの作成)

コミット

インデックスに追加された変更ファイルをローカルリポジトリに反映する。

チェックアウト

作業するブランチを切り替える。チェックアウト後のコミットは切り替えたブランチに対して行われる。

追加

作業ディレクトリの変更ファイルをインデックスに登録する。SVNの追加と同じ感じ。

削除

インデックスに登録した変更ファイルをインデックスから削除する。SVNの追加の取り消しと同じ感じ。

フェッチ

リモートリポジトリの変更を取ってくる。マージはされない。 勝手にマージされると困るときはプルじゃなくてフェッチして手動でマージするといった使い方かな?よく分からない。

プル

リモートリポジトリの変更をローカルリポジトリにマージして反映する。SVNでいうと更新みたいな感じ。

プッシュ

ローカルリポジトリの変更をリモートリポジトリに反映させる。

ブランチ

SVNのブランチと同じようなものだと思うけどよく分からない。 初コミット時にはmasterブランチが作成されて、以降はブランチを分けない限りmasterブランチにコミットしていくことになる。

作業の流れ

  • 「リモートリポジトリ」から「クローン」して作業ディレクトリを作成する。
  • 作業ディレクトリで変更したファイルを「インデックス」に「追加」して「コミット」すると「ローカルリポジトリ」に反映される。
  • 「ローカルリポジトリ」に反映された変更内容は、「プッシュ」することで「リモートリポジトリ」に反映される。
  • 「リモートリポジトリ」に他人が「プッシュ」した内容を「ローカルリポジトリ」に反映させるためには「プル」する。

↓の画像がわかりやすいと思う

f:id:tmysz:20141017154846p:plain

mod_rewriteのRewriteCondとRewriteRuleの使い方

業務で.htaccessにリダイレクト設定書くとき詰まったので使い方とかの備忘録。

基本的な形

.htaccessに書くときの基本形は以下のとおり。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond hoge fuga
RewriteRule piyo poyo
</IfModule>

事前にhttpd.confでmod_rewriteが有効になってる前提です。

RewriteRule

 URL書き換えのルールを指定します。以下はhoge.com/test/以下に置いた.htaccessの場合。

RewriteRule ^test1¥.html$ test/test2.html [R=301,L]

 この場合、hoge.com/test/test1.htmlへのアクセスがhoge.com/test/test2.htmlにリダイレクトされます。

RewriteRule ^(.+)¥.html$ test2/$1.html [R=301,L]

こんな感じで書くと、グループ化した正規表現にマッチした文字列をリダイレクト先の$1で変数のように使うことも出来ます。

RewriteCond

 RewriteRuleを実行するための条件を指定します。直後のRewriteRuleのみに適用されます。以下もhoge.com/test/以下に置いた.htaccessの場合。

RewriteCond %{QUERY_STRING} ^q=test$
RewriteRule ^test1¥.html$ test/test2.html? [R=301,L]

 この場合、q=testというクエリがついたアクセスがあった場合のみ2行目のRewriteRuleが適用されます。つまり、hoge.com/test/test1.html?q=testへのアクセスがhoge.com/test/test2.htmlにリダイレクトされます。ちなみにRewriteCondを複数行書くとANDで条件を指定できます(後述するフラグで[OR]と明示的に指定すればORで条件を指定することも可能)。

 また、RewriteRuleのリダイレクト先指定の最後に?をつけると、クエリが削除されてリダイレクトされます。

参考
Apache module mod_rewrite
RewriteRule でredirect時にquery stringを削除する - うまいぼうblog

Apache変数、フラグ

 上記RewriteCondで指定した%{QUERY_STRING}Apacheで用意されている変数で、クエリ文字列を表します。Apacheが用意している変数は他にもいろいろあります。

参考Apache RewriteCond の基礎知識 | WEB ARCH LABO

 RewriteRuleの行末に指定した[R=301,L]はフラグと呼ばれるものです。Rはリダイレクト、Lはこのルールにマッチしたら以降のルールは無視することを表しています。フラグも他にいくつか種類があります。

参考mod_rewrite - RewriteRuleのフラグと、RewriteCondの変数一覧 - Qiita