php_modが非推奨になったのね

昔のバージョンのphp環境でphpバージョンを上げるという対応中。 apache + PHP8のインスタンスを構築してドキュメントルートまで到達を確認。 対応する人にドキュメントルートまで到達するからプロジェクトのファイルを置いてバージョンアップのエラーを確認してもらうため依頼しましたが HTTP 503 Service Unavailable のエラーが出ているとのこと。 HTMLファイルはアクセスできているからPHPの実行ができていないと思い調べると Apache HTTP サーバーで使用するために PHP に提供されている mod_php モジュールが非推奨になりました。 php-fpmをインストールして起動し、リクエストを流してphp-fmpでphpを実行するようにして解決。 しばらくPHPを触っていなかったのでモジュールが非推奨になったことに気づかずでした。

cakePHP3の.htaccessでrewriteできなくてはまる。。。③

cakePHP3でconfにrewriteの設定を記載したのに

効かなくて困った


今回で最終です。。

なんだかんだこの関連で3回も記事を書いてしまいました

前回まではこのタイトルに至るまでの経緯と行った作業をつらつらと書いてきたのですが
ここで問題が発生しました

それは、virtualhost.confに記載したこの部分です

        RewriteCond %{REQUEST_URI} !^/img/${project}
        RewriteRule ^img/(.*)$ img/${project}/$1 [L]

これの意図は、イメージはそれぞれの管理者(企業)のイメージになるため既存仕様ではイメージディレクトリは複数に対応していないので意図する管理者(企業)の画像が登録されなかったり、意図しない画像が上書きされてしまったりいてしまいます
ですので管理画面はそれぞれのproject_codeのディレクトリ階層に登録されるように変更しました

さて登録は問題なくなりましたが、参照にも手をいらなくてはいけないわけです
このサービスは、android/iOSのアプリを利用するサービスで、こちらも管理者(企業)ごとに作成されます。しかし、画像のパスも管理者(企業)が増えるたびに内部の画像パスも変更しなければならないことになり、アプリの初期コストに少なからずなります
さらにはそれぞれの記載をしていればミスも産まないわけではわりません

そこで、virtualhost.confに先ほどの記載をして元々のイメージパスにアクセスしてきたら、アクセスドメインで画像のパスをイメージパスの下に作成したプロジェクトコードの下に置かれた画像を参照するようにしようとしたわけです

しかしここで意図しない挙動になりました

apacheを再起動してアクセスすると、project_codeでURLは書き換えられてアクセスしますが、さらにまた書き換えてを繰り返してしまうのです

アクセスログを確認するとこんな感じです

https://domain.com/project_code/img/top.jpg
https://domain.com/project_code/project_code/img/top.jp
https://domain.com/project_code/project_code/project_code/img/top.jpg
・・・・

こんな感じです。。。

はじめはなんだ??っと困惑しましたが

まさか!?

と思って一つ試しました

それは、cakePHP3にある.htaccessのrewriteをコメントしてvirtualhost.confに移してみること

そうするとうまくいきました

よくよく考えると納得です

virtualhost.confに書かれた記述でimgのアクセスはプロジェクトコード付きでアクセスされますが、今度は.htaccessに書かれた記述が影響します

    RewriteRule    ^$    webroot/    [L]
    RewriteRule    (.*) webroot/$1    [L]

この記載ですね

上は先頭から始まり末尾なのでドメインでアクセスした場合はwebroot/に流して
下は任意の一文字に0回以上マッチしたらwebroot/{ドメインの後ろ}で流す

ということで、挙動を考えてみると

まずはvirtualhost.confでアクセスしてきたURLをrewiriteします
https://domain.com/project_code/img/top.jpg
になります
しかし今度は.htaccessに記載された
RewriteRule    (.*) webroot/$1    [L]

これの書き換えが行われるんですよね

挙動をみるとどうやら.htaccessの書き換えの後に再びvirtualhost.confの書き換え条件をチェックするみたいですね
そうするとvirtualhost.confのルールですから
https://domain.com/project_code/project_code/img/top.jp
こちらで書き換えされて、.htaccessのルールで書き換えされる・・・

これの繰り返しです

そうやら.htaccessのRewriteRuleでマッチしてもどうやらまた最初から条件をみてしまうみたいですね
こちらの記事は後から見つけました。。。
vhosts.conf に書いた mod_rewrite が効かなくて泥沼にはまる

私がした対応は以下です

>>         RewriteEngine on
>>         RewriteCond %{REQUEST_URI} !^/img/${project}
>>         RewriteRule ^img/(.*)$ img/${project}/$1 [L]
>>         RewriteRule    ^$    webroot/    [L]
>>         RewriteRule    (.*) webroot/$1    [L]
>>         SetEnv PROJECT_CODE ${project} 

と.htaccessに記載されていたものをvirtualhost.confに移しました
.htaccessにRewriteCondを記載するという方法もあるらしいのですが、${project} こちらが取得できないので判別できずに諦めました。。。

ということでこちらの件は解決して以上になります

前回まではこちら!
cakePHP3の.htaccessでrewriteできなくてはまる。。。①
cakePHP3の.htaccessでrewriteできなくてはまる。。。②


=====ちなみに
後からですがこちらの記事が一番対応が綺麗かと思いました
rewriteのこともわかりやすく書いてありました
.htaccess に RewriteRule 書くときは、[L]フラグをつけてもそこで終了しないかもよ?って話。
ENDフラグをつければ良いかもしれません

今度試してみよう!!

コメント

このブログの人気の投稿

nginxで画像が表示されない。。

AWSのS3バケットをマウントするs3fsでマウントが外れた件

CakePHP3でHTTPSにする