想办法。重点来自/etc/apache2/httpd.conf的话:
The <IfDefine> blocks segregate server-specific directives
and also directives that only apply when Web Sharing or
server Web Service (as opposed to other services that need Apache) is on.
The launchd plist sets appropriate Define parameters.
mac中Web共享的动作(系统偏好设置->网络共享)本质上是先启动plist
设置合适的Define
参数,然后调用apachectl
. 如果我们阅读 httpd.conf,我们可以发现该文件由几个部分构成——<IfDefine xxxx>yyyyy</IfDefine>
基于 plist 中的参数。
如果我们sudo apachectl start
像在linux中那样在终端中调用命令,则无法设置来自plist的Define parameters。虽然 httpd 已启动,但没有正确配置,例如,在我的情况下,DocumentRoot
根本没有设置,因为参数被包围
<IfDefine !MACOSXSERVER>
<IfDefine WEBSHARING_ON>
DocumentRoot "/Library/WebServer/Documents"
</IfDefine>
</IfDefine>
这就是错误日志说的原因[error] [client 192.168.1.2] File does not exist: /usr/htdocs
。至于 /usr/htdocs,它没有在任何配置文件中设置,而是在 Apache 中硬编码。这是寻找的“最后手段”的地方。
如果我们评论#<IfDefine !MACOSXSERVER>
and#<IfDefine WEBSHARING_ON>
和 两者,请在终端中#</IfDefine>
调用。sudo apachectl start
然后一切正常。
我花了一整天的时间才最终解决这个问题。我希望它对那些曾经是 Linux 并且特别喜欢像我一样在终端中使用命令行并且只是转向 Mac 的人有用。