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

CentOS7でのIP固定

日ごろ業務ではwindowsにVitrtualBox+VagrantにCentOSをいれていたのですが、スペックにややネックがあったため、今は使っていないPCにCentOS7を入れて開発企図して使うこ …

no image

MariaDBインストール

CentOS7からはyumでmysqlをインストールするとMariaDBがディフォルトになるようです。 せっかくなので、これを機にMariaDBを使ってみました。といってもMySQLとほとんど一緒でし …

no image

vagrantでサーバーの状態を保存(snapshot)

上司がAnsible(構成管理ツール)のサンプルをくれたのですが、試そうにもまっさらなサーバーを用意しないといけません。 サーバー環境を新規に契約するのは面倒なのでvagrantで当然考えています。 …

no image

ファイルアップロード・ダウンロードに関するシェルスクリプト

ファイルのアップロードやダウンロードに関するシェルスクリプトなんぞを。 地味ですが、以外に登場頻度は高いかと。 Contents1 FTP1.1 ダウンロード1.2 アップロード2 SCP2.1 アッ …

no image

zabbixエージェント設定

本日はzabbixのエージェント設定について。 zabbixでは監視される側と監視する側があり、する側は通常Zabbix Serverになり、される側はzabbix Agentになります。 要はサーバ …

アーカイブ