リダイレクト

ブラウザからのリクエストのstatuscodeが301か302で送信された場合、Response HeaderのLocationにあるURLが再度リクエストされるようになる

サーバー内でURLを振り分けているのではなく、301or302のステータスコードとlocationをブラウザに送信し再度リクエストを送るよう要求している

※URLの末尾に/が入っていない場合、Apacheの設定で/をつけて再度リダイレクトする機能がある

 

ステータスコード301と302の違い

 → 301 一度リダイレクトされると情報がdisk cacheに保存されその情報がRequestHeaderのlocalに乗る(サーバーの情報が反映されない)

Apatchのコンテキストの種類

■サーバー設定ファイル

httpd.conf srm.conf acsses.conf など

■バーチャルホスト

一つのサーバーで複数のドメインをもつ事ができる

ディレクト

<directory><location><files>など

タグに囲まれた部分をセクションと呼ぶ

<Directory パス名>

設定したディレクティブはサブフォルダでも有効になる

.htaccess

conf/apache/httpd.confにあるAllowOverrideを有効にする必要がある

ディレクトリに配置する。配置した.htaccessは子要素でも有効で子要素に配置された.htaccessが優先される

OptionsやDirectoryIndexなどのディレクティブをhttpd.confに書かずに配置した.htaccessに書く

リクエストのたびに読み込むので処理が重くなる

 

 

ディレクティブはコンテキストによって使えるものと使えないものがある

httpd.apache.org

【MAMP】Apatchのディレクティブ

■Alias

Alias パス ファイルの絶対パス

で指定する

  • URLを第一引数で指定した値に置き換える
  • フォルダは/で終わるように指定
  • MAMP/htdocs以外のパスのファイルも指定可能

■DirectoryIndex

Directoryディレクティブの中で使用する

ディレクティブにアクセスがあった場合にどのファイルを表示するかを制御する

  • ifmodule dir_moduleの項でデフォルトのファイル名が指定されている

 

■Options

設定されているオプションを制御

  • htdocsに設定されていたoptionsを - をつけることで無効化(-Indexes) 
  • -や+をつけないでオプションを指定するとそのオプションのみ指定になる

 

■Redirect

Redirect ステータスコード アクセス元のパス リダイレクト先のパス

  • ステータス301は永続的なリダイレクト、302は一時的に引っ越したことを表す(デフォルトは302)
  • アクセス元のパスに前方一致したパスをリダイレクト先のパスに置換しブラウザのRequest Header locationに返す

 

■LogLevel

emerge、areat、crit、error、warn、notis、info、debug、

デフォルトはwarn

 

■ErrorLog

エラーログの出力先ファイルのパスを指定

 

■logformat

ログを出力する際のフォーマットを指定

CustomLogディレクティブで使用するために名前をつける

httpd.apache.org

 

■CustomLog

ファイルの出力先パス LogFormat名

LogFormatのルールに従って出力する

 

 

 

■RewriteRule

RewriteEngin OnをRewriteRuleの前に呼び出す必要がある

OptionのFollowSymLinksがディレクトリで記述されている必要がある

pattern substitution [flag]

patternをsubstitutionに置き換える

flag R=code:ridirect F:403エラーを発生させる L:処理を終了。以降のRewriteRuleは実行しない。複数利用したい場合はカンマで区切る

インターナルリダイレクト:クライアント側にリダイレクトを要求せずサーバーで疑似的にリダイレクト処理をする

 

【MAMP】認証の仕組み

$_SESSIONにIDとパスワードを保存し、値を保持しているかどうかで条件分岐する

クッキーに保存されるvalueが流出してしまうとなりすましログインされる危険性があるためhttpsオンリーやsecureをtrueにしておく必要がある

【MAMP】webの情報を保存する仕組み

三つの方法がある

  1. クッキー
  2. セッション
  3. DBに保存

 

□クッキーとは

  • サーバーからsetcookie(Name, value, option)で保存
  • 変数$_COOKIE[name]で呼び出せる
  • response headerでブラウザに返され、以後expireの期限が切れるまで相互に送信される

パラメータ(ブラウザの開発ツールApplicationタブから確認できる)

Name:クッキーの名前

Value:クッキーの値

domain:そのクッキーが有効なドメイン

path:そのクッキーが有効なパス(そのパス以外では送受信されない)

Expires:この期限が切れたら消滅する

Secure:Httpsの通信でのみ送受信される

Httponly:trueにするとjavascriptから操作できずにセキュリティが担保される

 

 

□セッションとは

  • サーバーサイドでsession_start()関数を宣言し使用する
  • $_SESSION['name'] = value で値を保存(upload_tmp_dirが設定されていない場合MAMP/bin/php/sessions に保存される)
  • ブラウザに↑のファイル名がvalueの値になったPHPSESSIDというクッキーが返される
  • そのクッキーをもとにブラウザからサーバーのセッションを参照する

 

 

クッキーはブラウザに直接値が保持されるため改ざん可能

あまり使われずセッションIDを保持する用途でよく使われる

【MAMP】webの情報を保存する仕組み

三つの方法がある

  1. クッキー
  2. セッション
  3. DBに保存

 

□クッキーとは

  • サーバーからsetcookie(Name, value, option)で保存
  • 変数$_COOKIE[name]で呼び出せる
  • response headerでブラウザに返され、以後expireの期限が切れるまで相互に送信される

パラメータ(ブラウザの開発ツールApplicationタブから確認できる)

Name:クッキーの名前

Value:クッキーの値

domain:そのクッキーが有効なドメイン

path:そのクッキーが有効なパス(そのパス以外では送受信されない)

Expires:この期限が切れたら消滅する

Secure:Httpsの通信でのみ送受信される

Httponly:trueにするとjavascriptから操作できずにセキュリティが担保される

 

 

□セッションとは

  • サーバーサイドでsession_start()関数を宣言し使用する
  • $_SESSION['name'] = value で値を保存(upload_tmp_dirが設定されていない場合MAMP/bin/php/sessions に保存される)
  • ブラウザに↑のファイル名がvalueの値になったPHPSESSIDというクッキーが返される
  • そのクッキーをもとにブラウザからサーバーのセッションを参照する

 

 

クッキーはブラウザに直接値が保持されるため改ざん可能

あまり使われずセッションIDを保持する用途でよく使われる