前言

打开本文默认您已经了解Apache和PHP。
和windows不同,Mac自带了Apache环境,我们要做的只是稍微配置一下

开启Apache

在终端输入 sudo apachectl start 提示输入密码,密码不可见,输入完回车。
在浏览器中访问 http://127.0.0.1 可以发现页面已经打开。服务开启成功.

apache 默认网站根目录 /Library/WebServer/Documents;

cd /Library/WebServer/Documents
vim index.html
// 随便写些什么
:wq! // 保存

刷新网站页面,可以发现,修改的内容已经变化。

ps: vim命令可参考Vim/Vi语法, 如不喜欢vi编辑,可以手动创建index.html, 使用编辑器修改,效果一样。

其他命令

sudo apachectl start // 开启
sudo apachectl stop // 关闭
sudo apachectl restart // 重启

在Apache中开启php

为避免出错,文件修改前建议做好备份。

sudo vim /etc/apache2/httpd.conf

使用vim编辑httpd.conf文件, 如不喜欢vi编辑可以使用编辑器进行编辑,如下

cd /etc/apache2 // 进入文件目录
open ./ // 打开文件目录

找到 httpd.conf 文件,拖拽至文本编辑器中编辑,下同。
如文件无法修改,提示权限问题,可将文件复制出来编辑,编辑完成再去替换源文件。

找到 #LoadModule php5_module libexec/apache2/libphp5.so 去掉前面的#(注释)
修改后 LoadModule php5_module libexec/apache2/libphp5.so

在终端中重启Apache

sudo apachectl restart 

在 /Library/WebServer/Documents 目录中创建 php文件,如index.php, 删除 index.html避免干扰

在index.php中编写php代码,如:

<?php
    echo "hello mac apache"
?>

刷新浏览器,可以发现,浏览器输出了hello mac apache。

至此,PHP开发环境已经开启完毕。

设置网站跟目录

根目录也叫虚拟主机就是网站代码存放的位置
虚拟主机和虚拟目录都可以理解为网站的根目录或子目录
默认开启的apache站点根目录是/Library/WebServer/Documents/,也就是说你要把代码文件放到这个目录下浏览器才会解析到。如果你觉得 /Library/WebServer/Documents 不太合适,可以参考下文,设置你钟意的目录。

在终端中输入

sudo vim /etc/apache2/httpd.conf

去掉下面代码最前面的#

#LoadModule authn_core_module libexec/apache2/mod_authn_core.so
#LoadModule authz_host_module libexec/apache2/mod_authz_host.so
#LoadModule authz_core_module libexec/apache2/mod_authz_core.so
#LoadModule dir_module libexec/apache2/mod_dir.so
#LoadModule userdir_module libexec/apache2/mod_userdir.so
#LoadModule alias_module libexec/apache2/mod_alias.so

修改后:

LoadModule authn_core_module libexec/apache2/mod_authn_core.so
LoadModule authz_host_module libexec/apache2/mod_authz_host.so
LoadModule authz_core_module libexec/apache2/mod_authz_core.so
LoadModule dir_module libexec/apache2/mod_dir.so
LoadModule userdir_module libexec/apache2/mod_userdir.so
LoadModule alias_module libexec/apache2/mod_alias.so

找到如下代码:

DocumentRoot "/Library/WebServer/Documents"
<Directory "/Library/WebServer/Documents">

其中 /Library/WebServer/Documents 即为网站的跟目录,修改为你喜欢的目录,注意使用绝对路径。
我的是 /Users/server
修改此项最好确定目录存在。

可通过终端 cd 进入到你意向的目录,在终端中输入 pwd 显示的即为你意向的目录绝对路径。

注意:被指定的目录需设置为共享文件夹 ( 文件夹 -> 右键选中显示简介 -> 勾选共享的文件夹)

找到:

#Include /private/etc/apache2/extra/httpd-userdir.conf
#Include /private/etc/apache2/extra/httpd-vhosts.conf
#Include /private/etc/apache2/other/*.conf

去掉前面的#, 修改后:

Include /private/etc/apache2/extra/httpd-userdir.conf
Include /private/etc/apache2/extra/httpd-vhosts.conf
Include /private/etc/apache2/other/*.conf

保存文件,

在终端中输入:

sudo vim /etc/apache2/extra/httpd-vhosts.conf

去掉 #Include /private/etc/apache2/users/*.conf 前面的#号 Include /private/etc/apache2/users/*.conf

保存文件

打开 /etc/apache2/extra/httpd-vhosts.conf 文件

在终端中输入

sudo vim /etc/apache2/extra/httpd-vhosts.conf

用#注释掉原有的两个VirtualHost (删除也可), 注释效果如下:

#<VirtualHost *:80>
#    ServerAdmin webmaster@dummy-host.example.com
#    DocumentRoot "/usr/docs/dummy-host.example.com"
#    ServerName dummy-host.example.com
#    ServerAlias www.dummy-host.example.com
#    ErrorLog "/private/var/log/apache2/dummy-host.example.com-error_log"
#    CustomLog "/private/var/log/apache2/dummy-host.example.com-access_log" common
#</VirtualHost>

#<VirtualHost *:80>
#    ServerAdmin webmaster@dummy-host2.example.com
#    DocumentRoot "/usr/docs/dummy-host2.example.com"
#    ServerName dummy-host2.example.com
#    ErrorLog "/private/var/log/apache2/dummy-host2.example.com-error_log"
#    CustomLog "/private/var/log/apache2/dummy-host2.example.com-access_log" common

添加我们设置的虚拟机

<VirtualHost *:80>
    DocumentRoot "网站根目录的绝对路径"
    ServerName phpworkspace
    ErrorLog "/private/var/log/apache2/phpworkspace-error_log"
    CustomLog "/private/var/log/apache2/phpworkspace-access_log" common
<Directory />
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order deny,allow
    Allow from all
</Directory>
</VirtualHost>

DocumentRoot 填写 网站根目录的绝对路径

保存 虚拟机创建完毕,网站跟目录配置完成

重启 sudo apachectl restart 生效

至此,根目录已修改完成,在你新配置的跟目录下创建index.php,添加内容,刷新浏览器查看效果。

常见问题

可能的原因有三个。

  1. 网站根目录没有设置为共享文件夹,或者 文件夹不存在
    右键"显示简介",勾选共享的文件夹,创建index.html文件
  2. 没有设置默认页面,或者站点下默认文件不存在
    打开 /etc/apache2/httpd.conf 文件
    修改 DirectoryIndex index.html 其中 index.html 为默认文件,可以修改名字,也可以添加多个,多个用空格分开。如下:
    DirectoryIndex index.html index.php index.jsp index.htm
    这是为站点设置默认页面,这时在网站的根目录下必须要有index.html index.php index.jsp index.htm这四种文件之一,否则还是可能会出现。
  3. 虚拟机设置问题
    打开 /etc/apache2/extra/httpd-vhosts.conf 文件
    <Directory />
        Options FollowSymLinks MultiViews
        AllowOverride None
        Order deny,allow
        Allow from all
    </Directory>

修改为

    <Directory />
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order deny,allow
        Allow from all
    </Directory>