タグ: htaccess

メンテナンス画面、移転しました画面にリダイレクトする

該当ドメインのどこにアクセスしてもメンテナンス画面、移転しました画面にリダイレクトさせる、
そんなmod_rewrite。

ここに書いてあることは
Webサイトのメンテナンス中画面を出す正しい作法と.htaccessの書き方
そのままなので、むしろここより読みやすいWeb担Forumをオススメ。

予期しないことが起きると精神的にいただけない[httpd.conf]は書き換えない。
すべて[.htaccess]で済ませます。

cd /var/web-root/

あたりで公開ディレクトリに行って

vi .htaccess

ErrorDocument 503 /hikkoshimashita.html

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} !=/hikkoshimashita.html
RewriteCond %{REMOTE_ADDR} !=192.168.0.2
RewriteRule ^.*$ - [R=503,L]
</IfModule>

なカンジ。

REMOTE_ADDRの行は引っ越しましたページを表示させたくないクライアントIPなので、
メンテナンスページの時は自分のIPを入れる。引っ越しましたページの時は必要ない。

あとは、hikkoshimashita.htmlに

<meta http-equiv="refresh" content="10; url=http://katzplus.com/" />

とか、好きなことを書けばいい。

mod_rewrite を適用するために httpd.conf を修正

新しいサーバに mod_rewrite を使ったシステムをそのままコピーしても使えない。
これは当たり前。
「.htaccess」をコピーしても使えない。
なんで?

httpd.conf も修正する必要があるから。
修正する箇所は次の2ヶ所。
両方共「AllowOverride」の設定。

1つ目。305行目付近にある。

<Directory />
    Options FollowSymLinks
    # AllowOverride None
    AllowOverride All
</Directory>

「None」を「All」に修正する。

2つ目も同じような修正。339行目付近にある。

<Directory /var/www/html>
    Options Indexes FollowSymLinks
    # AllowOverride None
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

この2箇所を修正すると .htaccess の mod_rewrite が動くようになる。

.htaccess でアクセス制限

ディレクトリごとに設定を変えたいなら .htaccess をいじったほうが楽。

DirectoryIndex index.php index.html
order allow,deny
allow from all
deny from .cn
deny from .kr
deny from .kp

<Files login.php>
Order deny,allow
Deny from all
Allow from 121.119.
Allow from 60.36.
</Files>

こんなカンジでどうかね。

.htaccess に mod_rewrite を書き足す

もう「?」の後ろにGETくっつけて次のページに指示を送るの飽きた!
wordpressみたいにスラッシュで区切って送りたい!

と思ったので、mod_rewrite をいじってみたかった。
けどサーバは既に運用中。httpd.conf を適当に書き換えるのはいただけない。
ので、.htaccess を書いてそのディレクトリのみに今回の仕様を適用することにします。

マニュアルは http://httpd.apache.org/docs/current/mod/mod_rewrite.html
日本語はちょっと古いけど http://japache.infoscience.co.jp/japanese_1_3_6/manual/mod/mod_rewrite.html このへんかな?

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#RewriteRule \.(jpg|gif|ico|css|js)$ - [L]
RewriteRule ^(.*)$ index.php?com=$1 [QSA,L]

こんな?
あとは com 以下の文章が普通に投げられるので、この部分を色々切り取ったりしてコマンドにする、と。

どうあってもshift-jisで表示したい

はるか昔からshift-jisで作成されているページをUTF-8環境下で表示させる時の.htaccessファイル。

AddDefaultCharset shift-jis
AddType "text/html; charset=shift-jis" .html .php

php_value default_charset               Shift_JIS
php_value mbstring.language             Japanese
php_value mbstring.http_input           auto
php_value mbstring.http_output          SJIS
php_value mbstring.internal_encoding    Shift_JIS

これだけ書いておけば十分だろうと思って書いたけど、ほんとに十分だった。

redirect

HTMLではmetaで。

<meta http-equiv="Refresh" content="5; URL=http://katzplus.com/" />

JavaScriptではlocation.hrefで。settimeoutと組み合わせればOK。

<script text/javascript>
<!--
setTimeout("location.href='http://katzplus.com/';",5000);
-->
</script>

PHPではheader関数で。

header("Location: http://katzplus.com/");

で出来るんだけどsettimeoutはどうやればいいんだ?

.htaccessではRedirectかRedirectMatchで。

Redirect permanent / http://katzplus.com/

とか

RedirectMatch 301 .* http://katzplus.com/

でいける。でもこれもsettimeoutは効かないなぁ。