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

AWSのCLIに関して

実務でAWSを使ってたんですがテスト時にはコマンドを使っている方がはるかに早いためコマンドライン環境を作っておいたほうが良いです。 ちなみに使用する前にはAWSのコンソールからIAMユーザーを作成する …

no image

Webの高速化に関して

Webの高速化に関してメモ。 高速化って言っても幅広いんですけどね。自分が行なっている対策に関して。 一応LAMP環境を前提にしてます。 Contents1 一番大事なのは測定2 DB対策3 フロント …

no image

mod_rewriteでの注意点

久々にhtaccessでのmod_rewriteをやりまして少しハマった(忘れていたのでポイントを) このネタではタグつけて結構書いてますね・・ http://skill-up-engineering …

no image

PHP7に関して

先週きづいたのですが、PHPが5.6から7になりましたね。 まあ当分はまだPHP5で開発していきますが、herokuがいきなり7になり、アプリが動かないということが起こりました。 7対応させたかったん …

no image

カレントディレクトリ以下のすべてのCR+LFをLFに

windows環境からファイルをアップしていると文字コードがバラバラだったりすることが多々あります。 まあ何がめんどくさいかというと差分がチェックできない。これが最悪です。 gitのdiffコマンドの …