メモ
http://memorva.jp/memo/linux/mod_rewrite.php

mod_rewriteのインストール・設定
  • mod_rewriteは、Apacheの機能で、モジュールを組み込むことで利用できます。
    Apacheについては、Apache・aprのインストール・設定 を参照。
    URL(ドメイン以下のパス)のリダイレクトや偽装、置き換えなどが行えます。

    一般的な正規表現を利用してRewriteRuleを書くことができます。
    正規表現については、正規表現関連のページを参照して下さい。
  • インストール関連情報
    rpmyum、apt-gettar.gzmake installシェル・環境変数
  • インストール
    Apache2の場合は、./configureに
    --enable-so --enable-rewrite=shared
    を付けて、その後makeします。
    バージョンによって書き方が多少違います。
    Apache・aprのインストール・設定 を参照。

    その後、Apacheのmodulesディレクトリにmod_rewrite.soがあるか確認。
    httpd.confに
    LoadModule rewrite_module modules/mod_rewrite.so
    という1行を追加。
    最初から書いてあればそのまま。
    コメントアウトされてるなら外す。
  • RewriteRule - http.confに書く場合
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^/sample/(.*)$ /shop/sample/$1 [L,R]
    </IfModule>
    http.confに書く場合は、書いた後Apacheを再起動します。
  • RewriteRule - .htaccessに書く場合
    .htaccessについては、.htaccessのサンプル・設定 を参照。
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^/sample/(.*)$ /shop/sample/$1

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule test\.php$ index.php?a=test
    RewriteCond %{REQUEST_FILENAME} !-f は、ファイルが実在しない場合という意味。
    RewriteCond %{REQUEST_FILENAME} !-d は、ディレクトリが実在しない場合という意味。
    つまり、RewriteRuleに合致するファイルやディレクトリが実在する場合は、RewriteRuleを適用しなくなる。
    上記の例では、test.phpが実在する場合や、実在するindex.phpにアクセスした場合は、RewriteRuleが適用されない。
    RewriteCondは、上記のようにRewriteRuleごとに書かないと動作しない。

    レンタルサーバのさくらインターネットでは、mod_rewriteがインストールされています。
    以下のように書いて動作しています。
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule book([0-9a-zA-Z_\-]+).html$ http://sample.com/test/index.php?bookid=$1 [L]
    例えば、上記ルールを書いた .htaccess を、test ディレクトリに置いた場合
    http://sample.com/test/book123.html
    にアクセスすると
    http://sample.com/test/index.php?bookid=123
    を処理する。
  • RewriteRule - http.conf(VirtualHost)に書く場合
    <VirtualHost 192.168.1.2>
    ServerName www.example.com
    DocumentRoot /test/htdocs
    RewriteEngine On
    RewriteRule ^/sample/(.*)$ /shop/sample/$1 [L]
    <Directory "/test/htdocs">
    Options Includes ExecCGI MultiViews
    AllowOverride All
    Order allow,deny
    Allow from all
    </Directory>
    </VirtualHost>
  • RewriteRuleの書き方・解説
    RewriteRule ^/sample/(.*)$ /shop/sample/$1 [L]
    の場合、
    http://ドメイン名/sample/ にアクセスすると
    http://ドメイン名/shop/sample/ のファイルを表示します。
    ブラウザの表示は、http://ドメイン名/sample/ のままです。
    http://ドメイン名/sample/test/test.php にアクセスすると
    http://ドメイン名/shop/sample/test/test.php のファイルを表示します。
    ブラウザの表示は、http://ドメイン名/sample/test/test.php のままです。

    [L]は、定義の最終行(Last)を意味します。
    この行以降のRewriteRuleは無視されます。
    一番最後の行に書きます。
    何も書かなくてもOK。

    [R]は、リダイレクトを行います。

    RewriteRule ^/sample/(.*)$ /shop/sample/$1 [L,R]
    の場合、
    http://ドメイン名/sample/ にアクセスすると
    http://ドメイン名/shop/sample/ のファイルを表示します。
    ブラウザの表示は、http://ドメイン名/shop/sample/ になります。
    http://ドメイン名/sample/test/test.php にアクセスすると
    http://ドメイン名/shop/sample/test/test.php のファイルを表示します。
    ブラウザの表示は、http://ドメイン名/shop/sample/test/test.php になります。

    RewriteRule ^/blog/view/([0-9]+)/?$ /blog/view/index.php?id=$1
    の場合、
    http://ドメイン名/blog/view/1234/ にアクセスすると
    http://ドメイン名/blog/view/index.php?id=1234 を表示します。
    ブラウザの表示は、http://ドメイン名/blog/view/1234/
    「/」の後に「?」を入れているのは、ヤフーなどの検索エンジンでは、 URLの後ろのスラッシュを削除したURLをインデックスに登録するため、 URLの後ろにスラッシュがあってもなくてもアクセスできるようにしています。

    RewriteRule ^/abc/([0-9a-zA-Z]+)/([0-9\-]+)/?$ /abc/test.php?id=$1&date=$2
    の場合、
    http://ドメイン名/abc/suzuki/2006-01-01/ にアクセスすると
    http://ドメイン名/abc/test.php?id=suzuki&date=2006-01-01 を表示します。
    ブラウザの表示は、http://ドメイン名/abc/suzuki/2006-01-01/
  • RewriteRule サンプル
    <VirtualHost 192.168.1.2>
    ServerName www.example.com
    DocumentRoot /test/htdocs
    RewriteEngine On
    RewriteRule ^/sample/(.*)$ /shop/sample/$1
    RewriteRule ^/blog/view/([0-9]+)/?$ /blog/view/index.php?id=$1
    RewriteRule ^/abc/([0-9a-zA-Z]+)/([0-9\-]+)/?$ /abc/test.php?id=$1&date=$2 [L]
    <Directory "/test/htdocs">
    Options Includes ExecCGI MultiViews
    AllowOverride All
    Order allow,deny
    Allow from all
    </Directory>
    </VirtualHost>

MySQLSELECTの結果をファイルに保存Add Star


mysql> SELECT * INTO OUTFILE "/tmp/result" FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' FROM employee WHERE id=17;

INTO OUTFILE: 保存するファイル名。

FIELDS TERMINATED BY: 区切り文字

OPTIONALLY ENCLOSED BY: カラムの値を囲む文字