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

ansible rolesなど

ansibleはある程度ファイルが肥大化してくると、管理するのが大変になります。 一般的にはプログラムのようにある程度のまとまりにわけてそれを読み込むということになります。 ある程度のまとまりのことを …

no image

IAMユーザー、ロールのポリシーの付与など

以前、↓のリンクでIAMの基本について少し扱ったので、もう少し具体的なパターンについて。 IAMユーザーについて 押さえておきたい概念としてはやはり ユーザー・・特定のキーなどでログインするユーザー …

no image

ログ抽出コマンド特集 その1 cat+grep+sort

先日、メモリ使用率の調査に関して記事をかいたのですが、今度はそのログの収集や抽出をおこなってみようかと思います。 やりたいこと yyyy/MM/dd-HH:mm:ss  メモリ使用率(少数2桁まで)  …

no image

ECSについて

AWSでwebアプリを立ち上げる場合、基本的にはEC2+RDS(小規模な場合は使わないケースもあるかも・・)+アルファの構成が多いと思うのですが、Dockerでコンテナイメージをもっていれば、コンテナ …

no image

VPSのCentOS上にVirtualBox+Vagrantをインストール

普段使っているPCにVirtualBox+Vagrantをいれることはあったんですが、VPS上のCentOSに仮想環境を入れたいとの要件があり、試してみました。 結論からすると結局できなかったんですが …

アーカイブ