Help us understand the problem. What is going on with this article?

macOS CatalinaのApacheでlocalhostにアクセスしたかった

タイトルの通りです。
macOS CatalinaのApacheくんとlocalhostを巡って激しく殴り合ったので、メモとして残しておきます。

何があった

http://localhost:8080は起動するのに色々いじくり回してもhttp://localhost/はrefusedされ、http://localhost:8080/~{ユーザ名}は404になる。キレそう。ていうかキレてる。

目標

  • Apacheを起動させてlocalhostにアクセスできるようにする
  • 作業ディレクトリをホームディレクトリ直下に変える
  • phpを複数バージョン使えるようにしたい

実行環境

  • OS:10.15 Catalina
  • Shell:zsh
  • テキストエディタ:atom

やったこと

実際はここを参考にしたので書いてあることはほぼ一緒です。英語に拒絶反応のない人はこっち見たほうがいい。

まずは動かす

結論から言うとmacにもともと入っていたApacheはなんか色々面倒らしいので、HomeBrewでApacheを持ってきた方が良いらしい。
とりあえずMacにもともと入っていたApacheを実行している場合は止めて自動で実行しないようにする。

$ sudo apachectl stop
$ sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist 2>/dev/null

もともと入っていたApacheくんに別れを告げたので、新しいApacheくんを持ってくる。

$ brew install httpd

新しいApacheくんを自動起動するように設定。

$ sudo brew services start httpd

ここで一旦localhostにアクセスしましょう。It works!みたいな表示が出るはずです。

Apacheの構成を変更する

デフォルトでは8080番ポートをListenしてるので80番ポートにする。
Apacheの設定ファイルは/usr/local/etc/httpd/httpd.confにあるのでこれをテキストエディタで開く。

$ atom /usr/local/etc/httpd/httpd.conf

52行目にListen 8080と書いてあるのでListen 80に変更。

次はDocumentRootを変更する。
249、250行目にこんな感じで書いてあるところがある。

DocumentRoot "/usr/local/var/www"
<Directory "/usr/local/var/www">

これを以下のようにする。(わかってると思うけど{ユーザ名}には自分のmacのユーザ名を入れる。)

DocumentRoot /Users/{ユーザ名}/Sites
<Directory /Users/{ユーザ名}/Sites>

そのちょっと下の270行目にあるAllowOverride Noneと書いてある箇所をAllowOverride Allに変更。
次に、182行目の#LoadModule rewrite_module lib/httpd/modules/mod_rewrite.soのコメントアウトを解除(行頭の#を削除)。

これでホームディレクトリの指定が終わった。でもこのままではアクセス権の問題があるので193、194行目にこんな感じで書いてある箇所がある。

User _www
Group _www

これを以下のようにする。

User {ユーザ名}
Group staff

あと、224行目に#ServerName www.example.com:8080と書いてあるはずだが、その下の行にServerName localhostと書いてなかったら改行してから書いておく。

動作確認

ホームディレクトリ直下に作業用ディレクトリを作ってテストファイルを作る。

$ mkdir ~/Sites
$ echo "<h1>Test</h1>" > ~/Sites/index.html

一旦Apacheを再起動。

$ sudo apachectl -k restart

localhostにアクセス。

スクリーンショット 2019-11-26 20.20.50.png

こんな感じになれば成功。今まではここまで行けなかったので非常に気分がいい。

phpをインストールする

(2019/12/04追記)php7.4が出たのでphp7.1が消えた。多分インストール出来るんだろうけどやってないのでここでは説明を省きます。以下の文を7.1→7.2、7.2→7.3、7.3→7.4に読み替えて下さい。

(正直ここらへんは参考にしたサイトの内容をそのままやったらできなかったので自分流)
まずHomebrewでphp7.1とphp7.2とphp7.3をインストール。

$ brew install php@7.1
$ brew install php@7.2
$ brew install php@7.3

php7.3とのリンクをちょん切ってとphp7.1とリンクする。

$ brew unlink php@7.3 && brew link --force php@7.1

一応ここで端末を再起動。
phpのバージョンを確認する。

$ php -v
PHP 7.1.33 (cli) (built: Oct 25 2019 10:52:19) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.1.33, Copyright (c) 1999-2018, by Zend Technologies

Apacheでphpを使えるようにする

恐らく182行目らへんにLoadModule rewrite_module lib/httpd/modules/mod_rewrite.soと書かれているはず。
その下の行にこれを追加。

LoadModule php7_module /usr/local/opt/php@7.1/lib/httpd/modules/libphp7.so
#LoadModule php7_module /usr/local/opt/php@7.2/lib/httpd/modules/libphp7.so
#LoadModule php7_module /usr/local/opt/php@7.3/lib/httpd/modules/libphp7.so

次に、282-284行目にこんな感じのブロックがある。

<IfModule dir_module>
    DirectoryIndex index.html
</IfModule>

これを下の文に置き換える。

<IfModule dir_module>
    DirectoryIndex index.php index.html
</IfModule>

<FilesMatch \.php$>
    SetHandler application/x-httpd-php
</FilesMatch>

保存して、Apacheを停止させてから再起動。

$ sudo apachectl -k stop
$ sudo apachectl start

phpがインストールできたか確認する。
以下のコマンドを入力。

$ echo "<?php phpinfo();" > ~/Sites/info.php

info.phpを開く。
スクリーンショット 2019-11-26 21.48.05.png

こんな感じの画面が出れば成功。

phpのバージョンを切り替える

以下のコマンドを入力。

$ curl -L https://gist.githubusercontent.com/rhukster/f4c04f1bf59e0b74e335ee5d186a98e2/raw > /usr/local/bin/sphp
$ chmod +x /usr/local/bin/sphp

続いて、以下のコマンドを入力。

$ echo $PATH

なんか出てきたと思います。その中に/usr/local/bin/usr/local/sbinがあるか探してください。
なかったらexport PATH=/usr/local/bin:/usr/local/sbin:$PATH~/.zshrcに追加しといてください。

sphpができるか確認しましょう。以下のコマンドを入力しましょう。

$ sphp 7.2

なんか色々出てくるはず。途中でパスワードも多分要求される。最終的にAll done!と表示されたらOK。
info.phpを開く。

スクリーンショット 2019-11-26 22.11.39.png
phpのバージョンが変わっていることがわかる。

以下のようにすれば任意のバージョンに変更可能。

$ sphp 変更したいphpのバージョン

(2019/12/04 追記)
いつからなのかは知らないけど、brew upgradeをすると7.1が消えて、php 7.3が7.4になる。この状態でsphp 7.4をやってもこんな感じになる。

$ sphp 7.4
Unknown version of PHP. PHP Switcher can only handle arguments of: 5.6,7.0,7.1,7.2,7.3

7.3を使いたい場合はbrew install php@7.3でphp 7.3を再インストール。

httpd.conf#LoadModule php7_module /usr/local/opt/php@7.3/lib/httpd/modules/libphp7.soの下の行に
#LoadModule php7_module /usr/local/opt/php@7.4/lib/httpd/modules/libphp7.soを追加。

/usr/local/bin/sphpを一旦削除する。違うとこ消すと面倒なので慎重に。

その後以下のコマンドを入力。

$ curl -L https://gist.githubusercontent.com/rhukster/f4c04f1bf59e0b74e335ee5d186a98e2/raw > /usr/local/bin/sphp
$ chmod +x /usr/local/bin/sphp

これでsphp 7.4が使えるようになったはず。
(追記終わり)

とりあえずこれで一連の操作はすべて完了。

覚えておきたいこと

Apacheの起動、停止、再起動は以下のコマンドで。

$ sudo apachectl start
$ sudo apachectl -k stop
$ sudo apachectl -k restart

Chromeでlocalhostを見ていると、リロードしても表示が変わらないときが多々ある。
そういうときはスーパーリロードをかけると良いかもしれない。
ChromeのスーパーリロードはCmd + Shift + Rで出来る。

あとがき

数時間で書いたので文章適当かもしれない。
割と面倒臭かった。正直Apacheとphp嫌いになった。

参考

macOS 10.15 Catalina Apache Setup: Multiple PHP Versions | Official home of Grav CMS

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away