我主要使用XAMPP来满足我的本地开发需求,但我觉得是时候关闭拐杖并从命令行界面开始工作了。
我遇到的问题是我的虚拟主机是指向ServerRoot,而不是指向虚拟主机指向的位置。我目前正在尝试的是laravel应用程序,所以我的文件结构是
的/ usr /本地的/ var / WWW / domain1的/ laravel
的/ usr /本地的/ var / WWW / domain1的/的public_html
这是我的配置文件
# /etc/apache2/httpd.conf
ServerRoot "/usr/local/var/www"
ServerName 127.0.0.1
DocumentRoot "/usr/local/var/www"
# /etc/apache2/extra/httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "/usr/local/var/www/mydomain.com/public_html"
ServerName dev.mydomain
ServerAlias www.dev.mydomain
ErrorLog "/private/var/log/apache2/dev.mydomain/error_log"
CustomLog "/private/var/log/apache2/dev.mydomain/access_log" common
</VirtualHost>
# /ect/hosts
127.0.0.1 localhost
127.0.0.1 dev.mydomain
::1 localhost
::1 dev.mydomain
当我在浏览器中访问dev.mydomain时,我需要/usr/local/var/www
代替/usr/local/var/www/mydomain/public_html
我已经重新启动了服务器。
编辑1:
当我遍历文件路径时,php文件也没有解析,而是作为常规文本文件打开。
编辑2:
我评论了httpd.conf DocumentRoot
行并重新启动了apache,但问题仍然存在。当我执行apachectl -t -D DUMP_VHOSTS时,虚拟配置变回空白。我没有注释/private/etc/apache2/extra/httpd-vhosts.conf以及LoadModule vhost_alias_module。
我改变了
包括/private/etc/apache2/extra/httpd-vhosts.conf
到
包括/etc/apache2/extra/httpd-vhosts.conf
但它们都链接到同一个文件。
编辑3:
执行apachectl -S
会返回与我建立的不同的服务器根。 `apachectl -t -D DUMP_VHOSTS也返回空。我认为我可能会运行不同版本的apache而不是OSX上的默认版本。几年前我和它玩过。有没有办法告诉当前运行的Apache配置路径在哪里?
编辑4:
我检查了httpd运行的位置,发现我运行的apache与默认值不同。
MacBook-Pro:extra Daniel$ whereis httpd
/usr/sbin/httpd
Daniels-MacBook-Pro:extra Daniel$ /usr/sbin/httpd -V
Server version: Apache/2.4.29 (Unix)
Server built: Jan 17 2018 18:20:31
Server's Module Magic Number: 20120211:68
Server loaded: APR 1.5.2, APR-UTIL 1.5.4
Compiled using: APR 1.5.2, APR-UTIL 1.5.4
Architecture: 64-bit
Server MPM: prefork
threaded: no
forked: yes (variable process count)
Server compiled with....
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_FLOCK_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=256
-D HTTPD_ROOT="/usr"
-D SUEXEC_BIN="/usr/bin/suexec"
-D DEFAULT_PIDLOG="/private/var/run/httpd.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="/private/etc/apache2/mime.types"
-D SERVER_CONFIG_FILE="/private/etc/apache2/httpd.conf"
我在另一个配置中再次取消注释了vhosts行,但现在我在重启时遇到错误
httpd:/usr/local/etc/httpd/httpd.conf第69行的语法错误:无法将lib / httpd / modules / mod_mpm_prefork.so加载到服务器:dlopen(/ usr / local / var / www / lib /httpd/modules/mod_mpm_prefork.so,10):找不到图像
答案 0 :(得分:1)
好的,问题是我几年前用Homebrew安装了apache但忘记了。我正在配置OSX apache配置文件。要找出正在使用的配置文件,请使用:
$ whereis httpd
/usr/sbin/httpd
$ /usr/sbin/httpd -V
Server version: Apache/2.4.29 (Unix)
Server built: Jan 17 2018 18:20:31
Server's Module Magic Number: 20120211:68
Server loaded: APR 1.5.2, APR-UTIL 1.5.4
Compiled using: APR 1.5.2, APR-UTIL 1.5.4
Architecture: 64-bit
Server MPM: prefork
threaded: no
forked: yes (variable process count)
Server compiled with....
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_FLOCK_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=256
-D HTTPD_ROOT="/usr"
-D SUEXEC_BIN="/usr/bin/suexec"
-D DEFAULT_PIDLOG="/private/var/run/httpd.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="/private/etc/apache2/mime.types"
-D SERVER_CONFIG_FILE="/private/etc/apache2/httpd.conf" <- where you config is, mine wasn't here
模块没有加载的原因是因为我很久以前改变了ServerRoot系列并且没有意识到它。默认的ServerRoot是/usr/local/opt/httpd
,其中包含lib
目录,该目录是模块所在和加载的位置。将httpd.conf重新设置为默认值并在更改路径之前查看该目录是帮助我抓住它的原因。