MacでIISが使えないのでMAMPを使う設定（躓き、とにかくやったこと沢山）


## まえおき
以下、筆者ががむしゃらに試してみたことなので
試される方は元のコードのバックアップしてからお試しあれ！

---



## PHP設定確認

MAMP内にあるhtdocs直下にphpinfo.phpという確認用のファイルを設置する。
```php:phpinfo.php
<?php
phpinfo();
?>
```
```アクセスする.URL
http://localhost/ポート番号(3000など)/phpinfo.php
```
※パスURLは設置場所に対応する
※複数プロジェクトの場合はそのプロジェクトファイル内にphpinfo.phpを設置。
　URLも対応したものに変わる。
　例：http://localhost/ポート番号(3000など)/プロジェクト名/phpinfo.php

phpの公式インフォが表示されれば設定されているということです。
ページ表示の記述がPHPなのでPHP設定できていなかったらエラーになるのだと思います。

<br>
<br>




##  PHP設定「短縮記述をONにする」（関連度：△）

変更ファイル：/Applications/MAMP/bin/php/php7.4.21/conf/php.ini

```PHP:php.ini(変更前)192行あたり
short_open_tag = Off
```
```PHP:php.ini(変更後)192行あたり
short_open_tag = On
```

【参考サイト】
・[PHPタグ](https://www.php.net/manual/ja/language.basic-syntax.phptags.php)
・[【PHP】タグを短縮できるようにする_2014](http://kawatama.net/web/1447)

<br>
<br>



# ルーティング設定関連


## access_filter.phpを通っているのか（確認作業）

exit;でPHPの処理終了させる
PHP始まりの記述後に記述（頭に終了処理を書くが2行目以降）

```diff_php:access_filter.php(分岐ファイル)
<?php
+　exit;
```

記述後、分岐先のURLをたたく。
exit;が効いていればサイトに処理が行く前に終了するので、
正常にaccess_filter.phpを通っていることがわかる。
（exit; を記述した状態で各ページが見られないのが正しい挙動。exit;で終了処理指示してるのにサイトが見られていたりしたらおかしい。）
→【このことにより、ルーティング設定がおかしいことがわかる。ルーティングの見直しをするのがいいかも。】

<br>
<br>





## .htaccessでルーティング設定をしようとしてやめて httpd.confに記述することにした。

【RewriteRule の [L] は .htaccess には記述できなくて httpd.conf の方に書かないといけないらしい】
というニュアンスの記事が多数みつかったので記述場所を切り替えた。
```
.htaccess（新規作成）
httpd.conf（元からMAMPにあるファイル）
```

IISの設定で「書き換え」「条件」の所をMAMPでも設定してあげなければならない。
IISの設定は過去記事でやってます！（IISで「URL 書き換え」（[「ルーティング設定）が必要だった](https://qiita.com/kusaharajiji/private/30394e9df68aa3e40344)）

【参考サイト】
・[【mod_rewrite】「.htaccess」でのLフラグは意味がない？](http://ysklog.net/mod-rewrite/related03.html)
・[【mod_rewrite】「httpd.conf」での設定方法](http://ysklog.net/mod-rewrite/related02.html)
※↓この記事を見てファイルを作成してルーティングを書くことを試していたが、
　以上の考えから中止。
・[.htaccessのリダイレクト – 書き方・設置場所・設定方法を解説します](https://gc-seo.jp/journal/how-to-redirect/)
・[htaccess tester](https://htaccess.madewithlove.com/)

<br>
<br>




## 分岐先のサイトのURLをたたいてエラー確認、そこから理由を探す(重要度：△)

URL例:http://localhost:3001/サイト/ページ.html
この場合サーバー側のエラーなのがわかる。
![____________________________2022-01-12_21.30.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/661441/3cbe8029-d68d-7f09-117b-46d383d0a0a8.png)

サーバーはテキストファイルでエラーが出る。
```
apache_error.log
php_error.log
```

<br>
<br>




##  ルーティングを許可する（反映させる）設定をhttpd.confに記述した（重要度：〇）

これでルーティングのmod_rewriteが許可される記述追記。
ルーティングの記述しても許可が無ければいけないらしい。

```MAMP内のhttpd.conf記述例記入
LoadModule rewrite_module modules/mod_rewrite.so
```

【参考サイト】
・[【mod_rewrite】「httpd.conf」での設定方法](http://ysklog.net/mod-rewrite/related02.html)

<br>
<br>




##  ルーティング設定やポート設定などを複数サイト設定するファイルに記述（重要度：〇）

```/Applications/MAMP/conf/apache/extra/httpd-vhosts.conf
<VirtualHost *:8001>
DocumentRoot "/Applications/MAMP/htdocs/プロジェクト名/www/"
ServerName プロジェクト名
ServerAlias プロジェクト名
RewriteEngine On
RewriteCond %{REQUEST_URI} ^(.*)$ [NC]
RewriteCond %{REQUEST_FILENAME} !(^(.*)¥.(gif|png|jpg|jpeg|css|svg|icon|js|pdf|xml|mp4)$) [NC]
RewriteRule ^(.*) /access_filter.php?request_url=/$1 [L]
<Directory "/Applications/MAMP/htdocs/プロジェクト名/www/">
AllowOverride All
</Directory>
</VirtualHost>
```

ここで再度URLをたたいてみる（http://localhost:3001/）
access_filter.php に exit; を記載している状態で画面真っ白が出力されるのは正常。
ここでexit; をけしてみるとサイトが見られるようになっているかも。。。と持ったがまた別の問題が。。。
今までと違うエラーでこの時点で「404 Not Found 」が返ってくる。

以下の記述が「404 Not Found 」を返しているので、見たいページのファイルパスがないよと言っている。
このファイルへのパスはなんなのか知ると手がかりがあるかも。
```access_filter.php
// ファイルが存在するかどうかの記述
if (!file_exists($file_path)) {
  header('HTTP/1.0 404 Not Found');
  exit;
}
```

<br>
<br>





##  上記のif文でチェックされている$file_pathの中身を確認する（重要度：〇）

#### $file_path変数の中身はhtmlファイルの中身を返すためのパス。

```access_filter.php
console_log($file_path);を記述して中身を確認すると以下の内容が。

/Applications/MAMP/htdocs/プロジェクト名/www/\\
```
ルートパスは以下の状態が正常。
違いは「\\」
```
$DOCUMENT_ROOT
/Applications/MAMP/htdocs/プロジェクト名/www/ （編集済み） 
```

<br>
<br>





## 「\\」（←バックスラッシュ２本です表示されてないだけ）を追加している記述を確認し、修正

```access_filter.php
「\\」（←バックスラッシュ２本です表示されてないだけ）を追加している記述を確認し、修正
「'\\'」を引けば希望のパスになるので変更

-----------------------

$file_path = $DOCUMENT_ROOT . str_replace('/', '\\', $request_url);
　　　↓↓↓↓↓
$file_path = $DOCUMENT_ROOT . str_replace('//', '', $request_url);
```

### これでサイト（html）ページが表示されるようになる！
##### がしかし。。。画像が表示されない。今まで表示されていたのは本番から表示させていたのですがローカルで見れないと開発できないのでここでも躓く。

<br>
<br>




## 「URL 書き換えの設定」の設定がおかしいことに気づき修正

以下の記述で転送の除外設定をしているが動いていないのではないかと気づく

```/Applications/MAMP/conf/apache/extra/httpd-vhosts.conf
RewriteCond %{REQUEST_FILENAME} !(^(.*)¥.(gif|png|jpg|jpeg|css|svg|icon|js|pdf|xml|mp4)$) [NC]
```
上記の中にWindowsのみに対応している記述があるのに気づく「¥」を「\」へ書き換える

```/Applications/MAMP/conf/apache/extra/httpd-vhosts.conf
【Windows】
RewriteCond %{REQUEST_FILENAME} !(^(.*)¥.(gif|png|jpg|jpeg|css|svg|icon|js|pdf|xml|mp4)$) [NC]
【Mac】
RewriteCond %{REQUEST_FILENAME} !(^(.*)\.(gif|png|jpg|jpeg|css|svg|icon|js|pdf|xml|mp4)$) [NC]
```

#### 【原因】エスケープ文字が OS で異なっていた。

<br>
<br>





----

### 以上がMACでMAMP設定が上手くいかなかったので試したことでした！
### これで表示できました～☆

かなり苦戦しました。先輩に教えて頂きながら２日粘りました。
問題を根っこから確認していく作業が思いつかないといけないのだと反省。

・PHPが効いているか
・MAMP内のプロジェクトの位置は合っているか
・ルーティングが単純なファイルパスと異なる記述がある場合はその流れを追う
・サーバー記述のエラーなのかそうじゃないのか（「Internal Server Error」サーバーと「404」その他、などの違い）
・エスケープ文字がOSで異なっている
・MAMPへの追加設定はhttpd.confで許可をする必要がある。htaccessを利用したり、ルーティング記述も割と許可出す変更が必要。なので、許可して、許可が通ってるかの確認が必要。


<br>
<br>

そして、Windowsで開発したり、自宅のPCがMacなのでそちらで開発したり、結構ややこしい。
このまま、自分PC用のMAMPやMacの為の記述を本番やmasterにUPしそうになりましたがWindowsで再び開発行ったり来たりするのでそれはタブー！とりあえず、対象ファイルはUPしない設定かいちいちコメントアウトして対応。
さすがに疲れたので手動でやってます。どんどん設定をいろんなところで追加していったらきっと忘れてしまいそう。。。
と思うのでした。備忘録大事。この記事もかなり後になって完成しました。ナイスファイト自分。


<br>
<br>




---


#### 【気になるワード】---記事内でより理解を深めたいワード
 
- MAMPの「httpd.conf」で行えるルーティング設定記述詳細
- IISのルーティング設定をMAMPの設定に変換する！
- [httpd.confで設定できるのにそもそもなぜこのファイルがあるの！？.htaccess](https://www.taizanweb.com/webtech/htaccess/rewrite.php)






ここらへん
https://hirokonakahara.com/blog/?p=3122

この設定必要だったんかな？いろいろな方法で設定できるってことなのかな？