MacOSX CatalinaでApche環境設定

以前（6年ほど前に購入）MacBookでWebサーバのテスト環境を作りました。
昨今の事情で、別のMacBookで同様の環境を作ろうとして、あれ？と思ったことから、今回はここに記録を残します。
#環境
MacOSX Catalina 10.15.3
Apache 2.4.41
ruby 2.6.3
#やりたいこと
ユーザディレクトリをドキュメントルートとして公開し、cgiを動かす
#設定内容
###現状
古いMacBookには「サイト」（ターミナル上のlsでは「Sites」）というフォルダがありましたが、新しいMacBookにはこのフォルダがありませんでした。
`~ $ sudo apachectl start`
を実行して、ブラウザで「 http://localhost/ 」 にアクセスすると「It works!」が表示される。
OS XにあったWebサーバ機能「Web共有」はMountain Lion(10.8)以降なくなり、ホームフォルダ直下「Sites」フォルダはなくなった（らしい....）

###ドキュメントルートの作成と設定
```
# cd /Users/hoge/     
# mkdir Sites2            #「Sites」フォルダを作成
# touch Sites/.localized  # 「.localized」ファイルを作成すると以前のように『サイト』と表示
```
Finderで確認
![スクリーンショット2020-04-07_14.22.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45016/9c1a6ea4-d808-20d9-d81c-d6d98ab1975a.png)

#### /private/etc/apache2/httpd.confを編集する(数値は行番号)
```ApacheConf
183 #LoadModule userdir_module libexec/apache2/mod_userdir.so
520 #Include /private/etc/apache2/extra/httpd-userdir.conf
 　　↓
183 LoadModule userdir_module libexec/apache2/mod_userdir.so
520 Include /private/etc/apache2/extra/httpd-userdir.conf
```
#### /private/etc/apache2/extra/httpd-userdir.confを編集する(数値は行番号)
```ApacheConf
16 #Include /private/etc/apache2/users/*.conf
   ↓
16 Include /private/etc/apache2/users/*.conf
```
#### Apacheを再起動しローカルフォルダのSitesにindex.htmlを作成
```ApacheConf
~ $ sudo apachectl restart
~ $ sudo vi /Users/entero/Sites/index.html
~ $ cat /Users/entero/Sites/index.html 
Here is User dir.
```
#### ブラウザで参照する
元々のドキュメントルート
![スクリーンショット 2020-04-07 15.32.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45016/d89a2a84-a331-1533-2e18-f91bcf040126.png)
ユーザのドキュメントルート
![スクリーンショット 2020-04-07 15.31.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45016/d24685c0-0167-e623-07aa-73deeea508ce.png)
なにも自分では指定しなかったのに、/Users/hoge/Sitesがドキュメントルートになっていました。
理由はここに既定値で“Sites”と指定されていました。 /etc/apache2/extra/httpd-userdir.conf
` 10 UserDir Sites`

ユーザディレクトリに作成したドキュメントルートのアクセスを制御するためのディレクティブは
/private/etc/apache2/users/hoge.conf　に記述します。例として以下を設定してみました。

```ApacheConf
<Directory "/Users/entero/Sites/">
        Options Indexes        # ファイル一覧の表示を許可 　　　　
        Require all granted    # すべて許可
</Directory>
```
ファイルindex.htmlをindex2.htmlにrenameして設定が有効になっていることを確認しました。
![スクリーンショット 2020-04-07 15.59.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45016/e0a85207-de21-8ecd-fecb-e4b685223128.png)

#### cgiを動作させる
##### 変更箇所は２つ
・ /private/etc/apache2/users/hoge.conf にユーザディレクトリのSites/cgiでcgiを動かすことを指定


```ApacheConf
<Directory "/Users/hoge/Sites/cgi">
    Options +ExecCGI
    AddHandler cgi-script .cgi
</Directory> 
```
・ /private/etc/apache2/httpd.conf の173行目のコメントアウトを解除

```ApacheConf
    169 <IfModule !mpm_prefork_module>
    170         #LoadModule cgid_module libexec/apache2/mod_cgid.so
    171 </IfModule>
    172 <IfModule mpm_prefork_module>
    173         LoadModule cgi_module libexec/apache2/mod_cgi.so
    174 </IfModule>
```
##### 動作確認
cgiディレクトリに下記のファイルtest.cgiを作成する

```ruby
$ cat /Users/hoge/Sites/cgi/test.cgi 
#!/usr/bin/env ruby
print "Content-Type: text/html; charset=UTF-8\n"
print "\n"
print "<html>"
print "これは<b>CGI</b>のテストです。"
print "</html>"
```

ブラウザで http://localhost/~hoge/cgi/test.cgi にアクセスすると「これはCGIのテストです。」と表示されてOK。
![cgiexec.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45016/ab3f6094-66af-551a-3e75-939b253a4fbd.png)
htmlのソースが表示される時は、上記の変更箇所
文字化けしてしまう時は、「charset=」を確認してください