Submit Search
Upload
.htaccessによるリダイレクト徹底解説
•
57 likes
•
165,982 views
Cherry Pie Web
Follow
2013年9月29日 WordBench京都
Read less
Read more
Technology
Report
Share
Report
Share
1 of 59
Download now
Download to read offline
Recommended
1 екологічні чинники
1 екологічні чинники
Nataliya Melnik
Золотой билет, или Чарли и шоколадная фабрика
Золотой билет, или Чарли и шоколадная фабрика
Яна Іванова
A műanyagok
A műanyagok
Diadal Úti Általános Iskola
аравтын бутархай
аравтын бутархай
NNaraa
પશુઓમાં આવતા રોગો
પશુઓમાં આવતા રોગો
BecharRangapara
エンジニアが知っておくべきSSL/TLSの知識(仮)
エンジニアが知っておくべきSSL/TLSの知識(仮)
Masahiro NAKAYAMA
SEOに効くコンテンツの作り方 ver1.1
SEOに効くコンテンツの作り方 ver1.1
INFOBAHN.inc(株式会社インフォバーン)
LPデザインに関して〜作成のセオリーとコツ〜
LPデザインに関して〜作成のセオリーとコツ〜
典子 松本
Recommended
1 екологічні чинники
1 екологічні чинники
Nataliya Melnik
Золотой билет, или Чарли и шоколадная фабрика
Золотой билет, или Чарли и шоколадная фабрика
Яна Іванова
A műanyagok
A műanyagok
Diadal Úti Általános Iskola
аравтын бутархай
аравтын бутархай
NNaraa
પશુઓમાં આવતા રોગો
પશુઓમાં આવતા રોગો
BecharRangapara
エンジニアが知っておくべきSSL/TLSの知識(仮)
エンジニアが知っておくべきSSL/TLSの知識(仮)
Masahiro NAKAYAMA
SEOに効くコンテンツの作り方 ver1.1
SEOに効くコンテンツの作り方 ver1.1
INFOBAHN.inc(株式会社インフォバーン)
LPデザインに関して〜作成のセオリーとコツ〜
LPデザインに関して〜作成のセオリーとコツ〜
典子 松本
DNS再入門
DNS再入門
Takashi Takizawa
サーバ運用の現場でひたすら監視し続けるエンジニアの手の内のすべて
サーバ運用の現場でひたすら監視し続けるエンジニアの手の内のすべて
Masahito Zembutsu
いまさら聞けないAWSクラウド - Java Festa 2013
いまさら聞けないAWSクラウド - Java Festa 2013
SORACOM, INC
Photoshopで効率よくデザインしよう!
Photoshopで効率よくデザインしよう!
Marie Suenaga
コンテンツ作りの三原則
コンテンツ作りの三原則
INFOBAHN.inc(株式会社インフォバーン)
最近のブラウザ状況
最近のブラウザ状況
yoshikawa_t
カヤックコピー部のコピー講座
カヤックコピー部のコピー講座
コピーライターはせがわ てつじ
WordPressプラグイン作成入門
WordPressプラグイン作成入門
Yuji Nojima
初心者向けMySQLの始め方
初心者向けMySQLの始め方
Masahiro Tomita
EC-CUBEプラグイン講義
EC-CUBEプラグイン講義
ria1201
スマホデザインパターン なう
スマホデザインパターン なう
Android UI勉強会
Illustratorのカンプとうまく付き合う方法
Illustratorのカンプとうまく付き合う方法
Takuya Nishitani
WordPress初心者からの脱出! カスタムなんとかをちゃんと理解する
WordPress初心者からの脱出! カスタムなんとかをちゃんと理解する
Takashi Uemura
WordPressで作るポートフォリオサイト
WordPressで作るポートフォリオサイト
Takuma Nishiyama
レスポンシブ・ウェブデザイン基礎
レスポンシブ・ウェブデザイン基礎
masaaki komori
WordPress を使いこなそう
WordPress を使いこなそう
Wataru OKAMOTO
HTML5時代のWebデザイン
HTML5時代のWebデザイン
masaaki komori
⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2
Nishida Kansuke
文系デザイナーでも大丈夫!レスポンシブWEBサイトをWordPressで作ってみよう
文系デザイナーでも大丈夫!レスポンシブWEBサイトをWordPressで作ってみよう
Junko Nukaga
Webデザインのセオリーを学ぼう
Webデザインのセオリーを学ぼう
Toshiaki Sasaki
DevOpsのアプローチと クラウド/バーチャル環境/構成管理ツール のお話
DevOpsのアプローチと クラウド/バーチャル環境/構成管理ツール のお話
Yukihiko SAWANOBORI
Chef
Chef
yaasita
More Related Content
Viewers also liked
DNS再入門
DNS再入門
Takashi Takizawa
サーバ運用の現場でひたすら監視し続けるエンジニアの手の内のすべて
サーバ運用の現場でひたすら監視し続けるエンジニアの手の内のすべて
Masahito Zembutsu
いまさら聞けないAWSクラウド - Java Festa 2013
いまさら聞けないAWSクラウド - Java Festa 2013
SORACOM, INC
Photoshopで効率よくデザインしよう!
Photoshopで効率よくデザインしよう!
Marie Suenaga
コンテンツ作りの三原則
コンテンツ作りの三原則
INFOBAHN.inc(株式会社インフォバーン)
最近のブラウザ状況
最近のブラウザ状況
yoshikawa_t
カヤックコピー部のコピー講座
カヤックコピー部のコピー講座
コピーライターはせがわ てつじ
WordPressプラグイン作成入門
WordPressプラグイン作成入門
Yuji Nojima
初心者向けMySQLの始め方
初心者向けMySQLの始め方
Masahiro Tomita
EC-CUBEプラグイン講義
EC-CUBEプラグイン講義
ria1201
スマホデザインパターン なう
スマホデザインパターン なう
Android UI勉強会
Illustratorのカンプとうまく付き合う方法
Illustratorのカンプとうまく付き合う方法
Takuya Nishitani
WordPress初心者からの脱出! カスタムなんとかをちゃんと理解する
WordPress初心者からの脱出! カスタムなんとかをちゃんと理解する
Takashi Uemura
WordPressで作るポートフォリオサイト
WordPressで作るポートフォリオサイト
Takuma Nishiyama
レスポンシブ・ウェブデザイン基礎
レスポンシブ・ウェブデザイン基礎
masaaki komori
WordPress を使いこなそう
WordPress を使いこなそう
Wataru OKAMOTO
HTML5時代のWebデザイン
HTML5時代のWebデザイン
masaaki komori
⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2
Nishida Kansuke
文系デザイナーでも大丈夫!レスポンシブWEBサイトをWordPressで作ってみよう
文系デザイナーでも大丈夫!レスポンシブWEBサイトをWordPressで作ってみよう
Junko Nukaga
Webデザインのセオリーを学ぼう
Webデザインのセオリーを学ぼう
Toshiaki Sasaki
Viewers also liked
(20)
DNS再入門
DNS再入門
サーバ運用の現場でひたすら監視し続けるエンジニアの手の内のすべて
サーバ運用の現場でひたすら監視し続けるエンジニアの手の内のすべて
いまさら聞けないAWSクラウド - Java Festa 2013
いまさら聞けないAWSクラウド - Java Festa 2013
Photoshopで効率よくデザインしよう!
Photoshopで効率よくデザインしよう!
コンテンツ作りの三原則
コンテンツ作りの三原則
最近のブラウザ状況
最近のブラウザ状況
カヤックコピー部のコピー講座
カヤックコピー部のコピー講座
WordPressプラグイン作成入門
WordPressプラグイン作成入門
初心者向けMySQLの始め方
初心者向けMySQLの始め方
EC-CUBEプラグイン講義
EC-CUBEプラグイン講義
スマホデザインパターン なう
スマホデザインパターン なう
Illustratorのカンプとうまく付き合う方法
Illustratorのカンプとうまく付き合う方法
WordPress初心者からの脱出! カスタムなんとかをちゃんと理解する
WordPress初心者からの脱出! カスタムなんとかをちゃんと理解する
WordPressで作るポートフォリオサイト
WordPressで作るポートフォリオサイト
レスポンシブ・ウェブデザイン基礎
レスポンシブ・ウェブデザイン基礎
WordPress を使いこなそう
WordPress を使いこなそう
HTML5時代のWebデザイン
HTML5時代のWebデザイン
⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2
文系デザイナーでも大丈夫!レスポンシブWEBサイトをWordPressで作ってみよう
文系デザイナーでも大丈夫!レスポンシブWEBサイトをWordPressで作ってみよう
Webデザインのセオリーを学ぼう
Webデザインのセオリーを学ぼう
Similar to .htaccessによるリダイレクト徹底解説
DevOpsのアプローチと クラウド/バーチャル環境/構成管理ツール のお話
DevOpsのアプローチと クラウド/バーチャル環境/構成管理ツール のお話
Yukihiko SAWANOBORI
Chef
Chef
yaasita
DockerでWordPressサイトを開発してみよう
DockerでWordPressサイトを開発してみよう
mookjp
PHP版レガシーコード改善に役立つ新パターン #wewlc_jp
PHP版レガシーコード改善に役立つ新パターン #wewlc_jp
Yahoo!デベロッパーネットワーク
Haikara
Haikara
jewel12
WordPress中級者への道!テンプレートタグはどう動くのか!?
WordPress中級者への道!テンプレートタグはどう動くのか!?
Shinichi Nishikawa
CakePHP - The point of upgrade
CakePHP - The point of upgrade
Yasuo Harada
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
Yukihiko SAWANOBORI
SaCSS vol.24
SaCSS vol.24
jun sugimoto
SaCSS vol. 24
SaCSS vol. 24
jun sugimoto
いまからでも遅くない Docker事始め&愉快な仲間達
いまからでも遅くない Docker事始め&愉快な仲間達
softlayerjp
git 初めの一歩
git 初めの一歩
Shin Yoshida
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
Ryo Nakamaru
PHP開発者のためのNoSQL入門
PHP開発者のためのNoSQL入門
じゅん なかざ
20100324 勉強会資料(ドメイン駆動)
20100324 勉強会資料(ドメイン駆動)
Masayuki Kanou
いまさら聞けないRake入門
いまさら聞けないRake入門
Tomoya Kawanishi
Powershell勉強会 v4 (もっと新しいバージョンがあります。)
Powershell勉強会 v4 (もっと新しいバージョンがあります。)
Tetsu Yama
WordPressのサーバー間引っ越しのツボ
WordPressのサーバー間引っ越しのツボ
Cherry Pie Web
HerokuでRailsアプリ運用の パフォーマンス、SEO対策
HerokuでRailsアプリ運用の パフォーマンス、SEO対策
Salesforce Developers Japan
Powershell勉強会 v5 (こちらが最新です。)
Powershell勉強会 v5 (こちらが最新です。)
Tetsu Yama
Similar to .htaccessによるリダイレクト徹底解説
(20)
DevOpsのアプローチと クラウド/バーチャル環境/構成管理ツール のお話
DevOpsのアプローチと クラウド/バーチャル環境/構成管理ツール のお話
Chef
Chef
DockerでWordPressサイトを開発してみよう
DockerでWordPressサイトを開発してみよう
PHP版レガシーコード改善に役立つ新パターン #wewlc_jp
PHP版レガシーコード改善に役立つ新パターン #wewlc_jp
Haikara
Haikara
WordPress中級者への道!テンプレートタグはどう動くのか!?
WordPress中級者への道!テンプレートタグはどう動くのか!?
CakePHP - The point of upgrade
CakePHP - The point of upgrade
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
SaCSS vol.24
SaCSS vol.24
SaCSS vol. 24
SaCSS vol. 24
いまからでも遅くない Docker事始め&愉快な仲間達
いまからでも遅くない Docker事始め&愉快な仲間達
git 初めの一歩
git 初めの一歩
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
PHP開発者のためのNoSQL入門
PHP開発者のためのNoSQL入門
20100324 勉強会資料(ドメイン駆動)
20100324 勉強会資料(ドメイン駆動)
いまさら聞けないRake入門
いまさら聞けないRake入門
Powershell勉強会 v4 (もっと新しいバージョンがあります。)
Powershell勉強会 v4 (もっと新しいバージョンがあります。)
WordPressのサーバー間引っ越しのツボ
WordPressのサーバー間引っ越しのツボ
HerokuでRailsアプリ運用の パフォーマンス、SEO対策
HerokuでRailsアプリ運用の パフォーマンス、SEO対策
Powershell勉強会 v5 (こちらが最新です。)
Powershell勉強会 v5 (こちらが最新です。)
More from Cherry Pie Web
concrete5を使って分かった、WordPressのいいところ
concrete5を使って分かった、WordPressのいいところ
Cherry Pie Web
熊本地震支援Webサイトの実例紹介と支援のためのホームページを作りたい人に絶対知っていてほしいこと
熊本地震支援Webサイトの実例紹介と支援のためのホームページを作りたい人に絶対知っていてほしいこと
Cherry Pie Web
Adobe Illustratorによる WordPressテーマ作成ワークフロー
Adobe Illustratorによる WordPressテーマ作成ワークフロー
Cherry Pie Web
熊本地震支援サイトを30分で立ち上げ即日運用開始した話
熊本地震支援サイトを30分で立ち上げ即日運用開始した話
Cherry Pie Web
お客様のための管理画面カスタマイズ
お客様のための管理画面カスタマイズ
Cherry Pie Web
南実業会Webサイト開設について
南実業会Webサイト開設について
Cherry Pie Web
「フォントはしゃべる」というお話
「フォントはしゃべる」というお話
Cherry Pie Web
TwentyTwelveの子テーマつくったらハマった話
TwentyTwelveの子テーマつくったらハマった話
Cherry Pie Web
Contact Form 7 よくあるカスタマイズ
Contact Form 7 よくあるカスタマイズ
Cherry Pie Web
More from Cherry Pie Web
(9)
concrete5を使って分かった、WordPressのいいところ
concrete5を使って分かった、WordPressのいいところ
熊本地震支援Webサイトの実例紹介と支援のためのホームページを作りたい人に絶対知っていてほしいこと
熊本地震支援Webサイトの実例紹介と支援のためのホームページを作りたい人に絶対知っていてほしいこと
Adobe Illustratorによる WordPressテーマ作成ワークフロー
Adobe Illustratorによる WordPressテーマ作成ワークフロー
熊本地震支援サイトを30分で立ち上げ即日運用開始した話
熊本地震支援サイトを30分で立ち上げ即日運用開始した話
お客様のための管理画面カスタマイズ
お客様のための管理画面カスタマイズ
南実業会Webサイト開設について
南実業会Webサイト開設について
「フォントはしゃべる」というお話
「フォントはしゃべる」というお話
TwentyTwelveの子テーマつくったらハマった話
TwentyTwelveの子テーマつくったらハマった話
Contact Form 7 よくあるカスタマイズ
Contact Form 7 よくあるカスタマイズ
Recently uploaded
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
UEHARA, Tetsutaro
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
sugiuralab
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
Hiroki Ichikura
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
Yuki Kikuchi
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
FumieNakayama
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
博三 太田
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
Hiroshi Tomioka
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
akihisamiyanaga1
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
FumieNakayama
Recently uploaded
(9)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
.htaccessによるリダイレクト徹底解説
1.
2013/09/29 WordBench京都 Cherry Pie Web
川井昌彦 .htaccessによるリダイレクト徹底解説 ~無限ループで100倍返しされないために~
2.
2 自己紹介 ●川井昌彦(かわいまさひこ)@sakuragi_kei 東京の制作会社で24年間勤めた後、 京都府舞鶴市に帰郷してフリーランスで活動中 実は、DTPのほうが経験が長いです (このスライドも InDesign で作っています) 実は、MovableTypeのほうが経験が長いです 小桜インコ・シロハラインコ・黒い柴犬のパパ Cherry
Pie Web http://www.cherrypieweb.com
3.
3 本日の予定 1. リダイレクトとは 2. 基本のリダイレクト 3.
mod_rewrite によるリダイレクト 4. WordPressが書き出すリダイレクトを見てみよう 5. まとめ ・・・実際は、こんなふうに キレイにはまとまっていません・・・
4.
4 リダイレクトとは ウェブページへの訪問者を、自動的に他のページへ移動させること ウェブページなどの移動の通知に使われることが多い 郵便局の自動転送というより、 ドアに、「引っ越しました」の 張り紙があるようなイメージ
5.
5 たとえば・・・ 1. ウェブページのファイル名が変わった 2. ウェブページを他のディレクトリに移動した 3.
ドメイン名が変わった 4. 一部のページに、ユーザーがアクセスできないようにする 5. index.htmlあり/なし、wwwあり/なしなどを統一する ・・・など
6.
6 リダイレクトの指定方法 1. htmlの、metaタグ 2. JavaScriptの、location.href=、または、location.replace() 3.
PHPなどで、HTTPヘッダーを出力 上記3つは、 アクセスされるすべてのページに指定しておかなければならない 4. Webサーバーの設定 httpd.conf または、.htaccess に指定する ページへのアクセス自体を制御できる
7.
7 .htaccess の有効範囲 .htaccess が置かれたディレクトリから下位すべてのディレクトリに有効 ただし、下位ディレクトリにも .htaccess
が置かれていた場合、 競合する設定は、 下位のものが有効 example.com .htaccess index.html test1.html sub1 .htaccess index.html subtest1.html sub2 index.html subtest2.html
8.
8 では、さっそくサンプルを いくつか
9.
9 ウェブページのファイル名を変えた Redirect:リダイレクトを示す Permanent:301リダイレクト(恒久的なリダイレクト) /test1.html:古いファイル名 ドキュメントルートからのパスを指定する http://example.com/test2.html:新しいファイル名 絶対URLを指定する Redirect Permanent /test1.html
http://example.com/test2.html
10.
10 ドキュメントルートとは? ブラウザからドメイン名でアクセスしたときのサーバー上の位置 (例)/var/user_name/public_html/ ←ここが、/(ルート)になる ファイルのドキュメントルートからのパスは、 URLからドメイン名をとったものと、だいたい同じ サブドメインやマルチドメインの時は、 サブディレクトリがルートになることもある http://example.com/test1.html
11.
11 絶対URLとは? http://www.example.com/test2.html のようにドメイン名を省略しないURL ※相対パスで指定できない! ※同じドメイン内でも省略できない!
12.
12 301リダイレクトとは? 完全に引っ越したとき(元に戻る予定はない) 302リダイレクトとは? メンテナンスなどで、一時的に移動しているとき
13.
13 301リダイレクトにするメリット 301リダイレクトと指定した場合、検索エンジンは、 元のページから新しいページに移動したことを、 検索結果に反映してくれるようになる。 また、元のページの評価を、 新しいページに引き継いでくれる。 ただし、 「はてブ」や「いいね」は 自動で引き継がれたり しません。 PageRankの 引き継ぎでーす
14.
14 ディレクトリを移動した oldディレクトリ以下へのアクセスはすべて、 newディレクトリ以下へリダイレクト Redirect permanent は、Redirect
301 と書いても良い 【注意!】 リダイレクト元とリダイレクト先のドメインが同じで、 ディレクトリが親子関係だとエラーになる (後述します) Redirect 301 /old/ http://example.com/new/
15.
15 ドメインを変えた 全てのアクセスを、http://example.com へリダイレクト 【注意!】 リダイレクト元とリダイレクト先のドメインが同じだとエラーになる (後述します) Redirect 301
/ http://example.com/
16.
16 負荷軽減のため画像ファイルだけを 他のサーバーから読み込む RedirectMatch:パターンマッチを使用したリダイレクト 301:301リダイレクト (.*¥.(jpg|gif|png))$:元の画像ファイル名 http://another-img.com$1:読み込む画像ファイル名 RedirectMatch 301 (.*.(jpg|gif|png))$
http://another-img.com$1
17.
17 正規表現の例 (.*¥.(jpg|gif|png))$ http://another-img.com$1 . :全ての文字 *:0回以上の繰り返し ( ):ブロックを指定 ¥.:ドット 「.
」は、正規表現ではすべての文字を示す ドットそのものを表すときは ¥をつける(エスケープする) (jpg|gif|png):jpg,gif,pngのいずれか $:行の終わり $1:1つめのブロック
18.
18 リダイレクトは、無限ループにならないように注意! たとえば、こんな設定で リダイレクト元とリダイレクト先のドメインが同じだったら・・・ つまり・・・ http://amachan.com へのすべてのアクセスを、 http://amachan.com/je/ へリダイレクトしたいとしたら・・・ Redirect
301 / http://amachan.com/je/
19.
19 http://amachan.com/index.php へのアクセスがどうなるか? WordPressでよくある、 サブディレクトリにWordPressをインストールした場合のリダイレクトは、 この書き方ではできない! http://amachan.com/index.php →
http://amachan.com/je/index.php → http://amachan.com/je/je/index.php → http://amachan.com/je/je/je/index.php → http://amachan.com/je/je/je/je/index.php → http://amachan.com/je/je/je/je/je/index.php 以下、無限ループ!!!!
20.
20 これまでの書き方の問題点 1. 同じドメインで階層の違うディレクトリにリダイレクトをしようとすると、 無限ループが起きやすい 2. リダイレクト先はドメインを省略できないので、使いまわしができない 例えば、テスト環境から本番環境に持っていく時に、 リダイレクト先のドメイン名をすべて書き直さないといけない ぐるぐる 回るよー
21.
21 mod_rewrite をつかったリダイレクト mod_rewriteは、 Apache Webサーバーのモジュールで、 サーバー内でURLの書き換えを行う ブラウザの種類、リファラ、時間などの あらゆる適用条件が指定できるなど とても柔軟な指定が可能
22.
22 mod_rewite はインストールしてないと使えない サーバーに対して権限があるなら、追加でインストールすればよいが、 レンタルサーバーなどでは自分でインストールはできない。 安いレンタルサーバでは、インストールされていないところもある。 レンタルサーバーでは、「よくある質問」のコーナーに、 「mod_rewrite は使えますか?」という質問が掲載されていることが多い。 PHPが使えるなら、phpinfo()
で調べる
23.
23 mod_rewrite がインストールされていなくても エラーが出ないようにする IfModule で囲んで、mod_rewriteがインストールされていないときは 実行されないようにしておく IfModule
mod_rewrite.c ・・・・ /IfModule
24.
24 では、さっそくサンプル (注)以下、IfModule mod_rewrite.c は省略します。
25.
25 ウェブページのファイル名を変えた /test1.html → /test2.html RewriteEngine
on:リダイレクトの記述の開始 RewriteRule:リダイレクトのルール RewriteEngine on RewriteRule ^test1.html$ test2.html
26.
26 RewriteRule ・リダイレクト元の正規表現パターン ^test1¥.html$: .htaccess と同じディレクトリにある test1.html
に適用される .htaccess のあるディレクトリからの相対パス mod_rewrite を使うときは、リダイレクト元のパスには / は不要 (リクエストされたURLから、.htaccess のあるパスまで削除されて、評価される) RewriteEngine on RewriteRule ^test1.html$ test2.html
27.
27 ^は行頭を表す → 同じディレクトリ以外には適用されない ×test/test1.html $は行末を表す
→ test1.htm には適用されない ¥.は、ドットを表す → .(ドット)はすべての文字という意味なので、 ドット自体を表したいときは、¥をつける(エスケープする) RewriteEngine on RewriteRule ^test1.html$ test2.html
28.
28 と書くと、test/test1.html など、下位のディレクトリにも適用される と書くと、test1.htm、test1.html の両方に適用される ^test1.htm$
と書くと、test1.html には適用されない RewriteEngine on RewriteRule test1.html$ test2.html RewriteEngine on RewriteRule ^test1.htm test2.html
29.
29 ・リダイレクト先の文字列 test2.html: .htaccess と同じディレクトリにある test2.html
にリダイレクト .htaccess のあるディレクトリからの相対パス、絶対パス、絶対URL RewriteEngine on RewriteRule ^test1.html$ test2.html
30.
30 ディレクトリを移動した oldディレクトリ以下へのアクセスを、newディレクトリにリダイレクト ^old/(.*)$:old以下へのすべてのアクセス ( ):ブロック $1:( )ブロックの1つ目 RewriteEngine on RewriteRule ^old/(.*)$
/new/$1
31.
31 ドメインを変えた すべてのリクエストを、http://newserver.com/ にリダイレクトする ^(.*)$:アクセスされたすべてのパターンにマッチ ( ):ブロック $1:( )ブロックの1つ目 【注意!】リダイレクト元とリダイレクト先のドメインが同じだとエラーになる RewriteEngine on RewriteRule
^(.*)$ http://newserver.com/$1
32.
32 負荷軽減のため画像ファイルだけを 他のサーバーから読み込む RewriteEngine on RewriteRule ^(.*).(jpg|gif|png)$
http://newserver.com/$1.$2
33.
33 トップページのURLを 「/index.html」ではなく「/」に統一 URLの正規化と言われるものの一つで、アクセス解析で重要 ほかにも、wwwあり/なし の統一などもできる RewriteEngine on RewriteRule
^index.html$ http://www.example.com/
34.
34 リダイレクトは、あちこちの .htaccess に書かない! .htaccess
を下位のディレクトリにおくことがあるが、 リダイレクトをあちこちに書くと混乱の元! ・ mod_rewrite を使った場合、 リダイレクト元、リダイレクト先のパスは、 .htaccess が置かれたパスが基準となるので、ややこしい ・ 下位のルールが適用されると、上位のルールが適用されなくなる
35.
35 (例1).htaccess をルートディレクトリだけにおいたとき /old/test1.html →
/test2.html リダイレクト先は、.htaccess が置かれているルートディレクトリになる RewriteEngine on RewriteRule ^old/test1.html$ test2.html
36.
36 (例2).htaccess をoldディレクトリだけにおいたとき /old/test1.html →
/old/test2.html リダイレクト先は、.htaccess が置かれているoldディレクトリになる RewriteEngine on RewriteRule test1.html$ test2.html
37.
37 (例3).htaccess を複数のディレクトリにおいたときー1 ・ルートディレクトリ・・・(1) ・oldディレクトリ・・・(2) /old/test2.html →
/old/test3.html (2)のルールのみ適用 /old/test1.html → 何も適用されない! (2)のルールのみ適用 RewriteEngine on RewriteRule ^old/test1.html$ test2.html RewriteEngine on RewriteRule ^test2.html$ test3.html
38.
38 リダイレクト指定が下位のディレクトリにもある場合 1. リクエストされたURLの最も下位の階層のリダイレクトを適用 2. リダイレクトされた結果のURLで、 改めて最も下位の階層のリダイレクトを適用 上位の設定を下位の設定で 上書きや追加をする わけではない!
39.
39 先ほどの例を見直すと・・・ ・ルートディレクトリ・・・(1) ・oldディレクトリ・・・(2) /old/test1.html がリクエストされたので、 oldディレクトリにあるリダイレクトの設定(2)が適用される。 ここに test1.html
に対する設定がないので、ここで終わり RewriteEngine on RewriteRule ^old/test1.html$ test2.html RewriteEngine on RewriteRule ^test2.html$ test3.html
40.
40 (例4).htaccess を複数のディレクトリにおいたときー2 ・ルートディレクトリ・・・(1) ・oldディレクトリ・・・(2) /test1.html →
/test2.html /old/test2.html → /test1.html → /test2.html (2)のルールでリダイレクトした結果、上位のURLになったので、 改めて上位のルール(1)のリダイレクトが適用される RewriteEngine on RewriteRule ^test1.html$ test2.html RewriteEngine on RewriteRule ^test2.html$ /test1.html
41.
41 複数のRewriteRule /test1.html → /test2.html
→ /new/test2.html RewriteRuleは、複数書ける どれかにマッチすればリダイレクトされるので、もちろん、これも有効 /test2.html → /new/test2.html RewriteEngine on RewriteRule ^test1.html$ test2.html RewriteRule ^test2.html$ new/test2.html
42.
42 RewriteBase RewriteBase:リダイレクト後のパスのベース /test1.html → /old/test2.html
となる /old/test1.html には適用されない ※RewriteBaseは、リダイレクト元には関係ない RewriteEngine on RewriteBase /old RewriteRule ^test1.html$ test2.html
43.
43 /old/test1.html に適用させるには、 リダイレクト元にディレクトリ指定が必要 RewriteEngine on RewriteBase
/old RewriteRule ^old/test1.html$ test2.html
44.
44 ※Rewritebaseは、リダイレクト後の指定が相対パスの時のみ有効 / をつけると絶対パスになるので RewriteBase
は無効になる /test1.html → /old/test2.html /test1.html → /test2.html (RewriteBase無視) RewriteEngine on RewriteBase /old RewriteRule ^test1.html$ test2.html RewriteEngine on RewriteBase /old RewriteRule ^test1.html$ /test2.html
45.
45 特定ディレクトリへのアクセス拒否 oldディレクトリ以下へのアクセスを拒否する [F]:403 Forbidden(アクセス権限がないエラー)を返す RewriteRule のリダイレクト先を「-」とすると、リダイレクトしない RewriteEngine
on RewriteRule ^old/.* - [F]
46.
46 ieからアクセスされたときだけ 違うファイルにリダイレクトする RewriteCond:条件にマッチした時、RewriteRuleを適用する %{HTTP_USER_AGENT}:環境変数(ユーザーエージェントを得る) [NC]:大文字小文字を区別しない RewriteEngine on RewriteCond %{HTTP_USER_AGENT}
MSIE [NC] RewriteRule ^test1.html$ test2.html
47.
47 使える環境変数 HTTP_USER_AGENT / HTTP_REFERER
/ HTTP_COOKIE / HTTP_FORWARDED HTTP_HOST / HTTP_PROXY_CONNECTION / HTTP_ACCEPT REMOTE_ADDR / REMOTE_HOST / REMOTE_USER / REMOTE_IDENT REQUEST_METHOD / SCRIPT_FILENAME / PATH_INFO / QUERY_STRING AUTH_TYPE DOCUMENT_ROOT / SERVER_ADMIN / SERVER_NAME / SERVER_ADDR SERVER_PORT / SERVER_PROTOCOL / SERVER_SOFTWARE TIME_YEAR / TIME_MON / TIME_DAY / TIME_HOUR / TIME_MIN TIME_SEC / TIME_WDAY / TIME API_VERSION / THE_REQUEST / REQUEST_URI / REQUEST_FILENAME IS_SUBREQ
48.
48 RewriteCondを使った例 ・2013年12月28日~2014年1月3日までの間だけリダイレクトする RewriteCondを複数書いたときは、AND条件(すべて満たしたとき) 比較に使えるのは、 = ( = みたいなのは使えない) 比較演算子の後にスペースを入れないこと RewriteEngine
on RewriteCond %{TIME_YEAR}%{TIME_MON}%{TIME_DAY} 20131227 RewriteCond %{TIME_YEAR}%{TIME_MON}%{TIME_DAY} 20140104 RewriteRule ^test1.html$ test2.html
49.
49 ・iPhoneまたはiPadからアクセスされたときだけリダイレクトする 次の条件とOR条件(いずれかを満たすとき)にしたいときは、 [OR]フラグをつける RewriteEngine on RewriteCond %{HTTP_USER_AGENT}
iPhone [NC,OR] RewriteCond %{HTTP_USER_AGENT} iPod [NC] RewriteRule ^test1.html$ /test2.html
50.
50 ・特定のIPアドレスからのアクセスを拒否 IPアドレスが 123.456.789.012 または
012.345.678.901 から アクセスされたら、403 Forbidden を返す [F]:403 Forbidden(アクセス権限がないエラー)を返す RewriteRule のリダイレクト先を「-」とすると、リダイレクトしない RewriteEngine on RewriteCond %{REMOTE_ADDR} ^123.456.789.012$ [OR] RewriteCond %{REMOTE_ADDR} ^012.345.678.901$ RewriteRule ^.*$ - [F]
51.
51 ・特定のIPアドレス以外からのアクセスを拒否 IPアドレスが 012.345.678.901 以外から アクセスされたら、403
Forbidden を返す !:否定(条件を満たさないときに有効) RewriteEngine on RewriteCond %{REMOTE_ADDR} !^012.345.678.901$ RewriteRule ^.*$ - [F]
52.
52 ・SSLによる通信を強制する http;// でアクセスされても、 https:// に強制的に切り替えることで、SSLを有効にする %{HTTPS}
off:httpsでないアクセス RewriteEngine on RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
53.
53 WordPressでパーマリンク設定した時 に作成されるリダイレクト IfModule mod_rewrite.c RewriteEngine On RewriteBase
/wordpress/ RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /wordpress/index.php [L] /IfModule
54.
54 RewriteBaseで指定されているのは、 WordPressがインストールされたディレクトリ RewriteRule のリダイレクト先を「-」とすると、リダイレクトしない [L]:これ以降のルールを適用しない ルートディレクトリのindex.phpにアクセスされたら リダイレクトしないで終了 → 次のルールによる無限ループが避けられる! RewriteBase
/wordpress/ RewriteRule ^index.php$ - [L]
55.
55 -f:ファイルが実在すると true -d:ディレクトリが実在すると true アクセスされたファイルまたはディレクトリが実在する場合 →
そのままそのファイルを表示 アクセスされたファイルもディレクトリも実在しない場合 → WordPressの index.php にリダイレクト RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /wordpress/index.php [L]
56.
56 Rフラグ [R]:302リダイレクト [R=301] とすれば、301リダイレクトになる ※Rフラグをつけないと、サーバー内部でリダイレクトが行われるので、 アクセスした側はリダイレクトしたことがわからない! → ブラウザのアドレスバーはリダイレクト前のURLのまま! RewriteEngine
on RewriteRule ^test1.html$ test2.html [R]
57.
57 ※Rフラグをつけると、 アクセスした側が新しいパス(URL)にアクセスし直したように見える → ブラウザのアドレスバーがリダイレクト先のURLに変わる SEOを考慮するなら、 [ R=301
] は必須! PageRankの 引き継ぎでーす
58.
58 リダイレクトのまとめ ・ 301リダイレクトと302リダイレクトを使い分けよう (メンテナンス等以外は、301リダイレクトを使う) ・ 無限ループに注意 ・ リダイレクトの記述は、できるだけ1か所にまとめよう ・ 正規表現を勉強しよう
59.
59 ご清聴ありがとうございました。
Download now