読者です 読者をやめる 読者になる 読者になる

MyController

WEB業界素人の僕がまた見返しそうなことのメモです。

コマンド(htaccessによるBasic認証、SSIなど)

メモ

BASIC認証

.htaccess
とりあえずこれいれとけばOK

******************************************************
AuthUserFile /var/www/html/.htpasswd
AuthGroupFile /dev/null
AuthName "Input ID and Password."
AuthType Basic
require valid-user
<Files ~ "^.(htpasswd|htaccess)$">
deny from all
</Files>

 

■htpasswd作成
htpasswd -c ファイル名 ユーザー名
-cオプションは.htpasswdファイルの存在しない初回のみ指定
⇒IDを追加する場合以外は新規作成ということ。

 

■Vhost内に設定を記載
<Directory "/var/www/html/">
Require valid-user
Options -Indexes
AllowOverride All
</Directory>

 

 

SSI化

htaccess内に下記を記載するのみ。

Options +Includes
AddHandler server-parsed html

 

HTMLに下記を記載。

<!--#include virtual="include/ga.txt" -->

 

 

リダイレクト

htaccessに下記を記載。(R=301は恒久的。R,Lにしたら普通のリダイレクト。)

※注意 301リダイレクトにするとブラウザのキャッシュ残るのでクリアしないと変更保存しても反映確認出来ない。

<IfModule mod_rewrite.c>
RewriteEngine ON
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ http://google.co.jp/$1 [R=301,L]
</IfModule>

出来ない場合はPHPで下記。

<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.hoge.com");
exit();
?>

ちなみに、chromeの場合はどうも上記header("HTTP/1.1 301 Moved Permanently");とすると二回目以降は直接リダイレクト先に飛ぶようになってしまうようだ。

もしそれが嫌なら下記で回避できる。

<?php
header("HTTP/1.1 301 Moved Permanently");
header( 'Pragma: no-cache' );

header("Location: http://www.hoge.com");
exit();
?>

解説

RewriteCond

RewriteCond に記述した条件が満たされた時のみ RewriteRule に書いたURLの書き換えと転送が実行。AND、OR条件も可能。

書式

RewriteCond %変数名(テスト文字列) 条件パターン(正規表現) [フラグ]
RewriteRule ここにRewriteRuleのURL書換&転送設定を記述

つまりこうなる

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

# HTTPでアクセスされた場合、
RewriteCond %{HTTPS} off
# 以下のURLは常に https にリダイレクトする
RewriteCond %{HTTP_HOST} www.example.com
RewriteCond %{REQUEST_URI} ^/admin/.*$ [OR]
RewriteCond %{REQUEST_URI} ^/inquiry/.*$
# ただし以下は除く
RewriteCond %{REQUEST_URI} !^/assets/.*$
RewriteCond %{REQUEST_URI} !^.*\.(js|css|gif|jpg|png|ico)$
# https にリダイレクト
RewriteRule ^.*$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

 

# HTTPSでアクセスされた場合、
RewriteCond %{HTTPS} on
# 以下のURL以外は常に http にリダイレクトする
RewriteCond %{HTTP_HOST} www.example.com
RewriteCond %{REQUEST_URI} !^/admin/.*$
RewriteCond %{REQUEST_URI} !^/inquiry/.*$
# ただし以下は除く
RewriteCond %{REQUEST_URI} !^/assets/.*$
RewriteCond %{REQUEST_URI} !^.*\.(js|css|gif|jpg|png|ico)$
# http にリダイレクト
RewriteRule ^.*$ http://%{HTTP_HOST}%{REQUEST_URI} [R,L]
</IfModule>