skillup

技術ブログ

サーバー・ネットワーク

URLのリライトに関して

投稿日:2019年8月29日 更新日:

laravelのアプリをサブディレクトリ(notサブドメイン)に配置しなくてはならないケースがあり、.htaccessと格闘したのでメモを。

このパターンはハマりが多いですね・・・

http://skill-up-engineering.com/tag/rewrite/

といっても個別のアプリのケースを書いてもあまり意味はないので、対応方法について記して置こうかと思います。

基本はRewriteCondとRewriteRule

基本的にはリダイレクトのパターンはRewriteCond(このパターンだったら)とRewriteRule(このように書き換える)になるかと思います。

ただしRewriteCondは複数書くことができます。

うまく切り替わらない時は要は

  1. RewriteCondが効いていない(条件の正規表現が違うなど)
  2. 適切なRewriteRuleが効いていない

のいずれかになります。修正時のポイントですが、1、2を切り離して調査するようにしましょう。

お勧めとして、1が正確に動いているかどうかを見るには

上記のように書いて見ましょう。

この場合、yahooに飛べば、RerwriteCondが動いているかどうかがはっきりとわかります。

RewriteBase

特にサブディレクトリのURLの書き換えとなりますと、

のようなケースが発生します。

この場合、hogeのところまでが書き換え不要ですので、

のように書いておくと、hoge以降がパターンマッチングやリライトの対象になります。

L,Rなどのフラグに注意

RewriteRuleでURL自体は意図した動きをしているのに、

  • 永久ループが発生している
  • ブラウザのURLを変えたくないのに変わってしまう

など動きが微妙に異なっている場合があります。

この場合、

RewriteRuleの後についているフラグが大切になってきます。

代表的なものは

L・・lastの意味。ここでURLの書き換えをストップ

R=301・・301リダイレクト ページの移転や通常の書き換え

R=302・・302リダイレクト メンテ画面やエラー画面など

*基本的にリダイレクトをするとブラウザのURLが変わります。

【mod_rewrite】フラグ

リライトは複数回行われていることを疑う

リライトが意図しない動きをしている場合、複数回のリライトがされていることが一般的です。

その場合、LフラグやENDフラグをつけるなどして、処理をストップさせるようにしましょう。

プログラムとリソース系のファイルの扱いの違いに注意

ある程度の規模のアプリになるとプログラム(例えばPHP)とリソース系のファイル(css,js,画像)などは分岐されていることが一般的です。

プログラムの場合、ルーティングなどが設定されていることが多いので、特定のファイルに飛ばすにことが一般的です。(大抵はルートディレクトのindex.php)

逆にリソース系のファイルは直でURL通りにアクセすることが一般的ですので、URLのルールが違うことが多いです。

階層の優先度に注意

ある階層でhtaccessをかくとその下全てに影響します。

ですので、影響度をコントールしたい場合、階層などをうまく切り分けるようにしましょう。

デバッグ

デバッグのポイント(ログ出しやキャッシュの消去など)は下記リンクなどを。

mod_rewriteでの注意点

-サーバー・ネットワーク
-, ,

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

no image

pidファイルに関して

サーバー上であるサービスを動いている(と思っている)時にstopしようとしたらpidファイルがありませんと怒られました。 pidファイルってよく聞くけどわかっていなかったのでこれを機にメモ。 Linu …

no image

chefのインストール

以前からずっと課題になっていたchefのインストールについてです。 まだ全然わかっていませんが、なんとかvagrantからのインストールをすることができましたのでメモします。 chefでの環境構築とい …

no image

Lambdaでの注意点

前に個人的な学習でLambdaを勉強しましたが、仕事で使う機会があり、気をつけるポイントを再度確認。 以前の学習リンク Amazon SESでの受信→S3→Lambdaでのメール転送 Contents …

no image

nginxでの設定について

何回かやったnginxの設定について。 特にサブディレクトリなどに設定したいなどの時に悩みますね・・・ Contents1 locationディレクティブ2 try_filesディレクティブ3 fas …

no image

メニュー系のCSS

よく迷うのでこれを機にまとめておこうかと。 Contents1 通常時のメニュー2 携帯(いわゆる縦のメニュー)3 ホバー時の画像選択4 小ネタ 選択されているときのメニュー 通常時のメニュー htm …

アーカイブ