我有一台ubuntu机器,我想在它上运行php rest服务器。这是我的默认配置文件:
ServerName localhost
<VirtualHost *:80>
DocumentRoot /var/www/html/otherSite
ServerName www.vlio20_paka.com
Alias /otherSite /var/www/html/otherSite
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /var/www/lbserver/public
ServerName www.vlio20_lb.com
Alias /lbServer /var/www/lbserver/public
<Directory /var/www/lbserver/public>
AllowOverride all
DirectoryIndex index.php
Require all granted
</Directory>
</VirtualHost>
在我的公共目录中,我有.htaccess文件:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Redirect Trailing Slashes...
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
当我尝试访问服务器http://MACHINE_IP/lbServer
我得到未找到错误。
我怎样才能让它工作(每次更改配置文件后,我都要重新启动apache)?
更新:
apache2 -t
生产:
[Sun Jun 28 12:00:00.789522 2015] [core:warn] [pid 22089] AH00111: Config variable ${APACHE_LOCK_DIR} is not defined
[Sun Jun 28 12:00:00.789835 2015] [core:warn] [pid 22089] AH00111: Config variable ${APACHE_PID_FILE} is not defined
[Sun Jun 28 12:00:00.789970 2015] [core:warn] [pid 22089] AH00111: Config variable ${APACHE_RUN_USER} is not defined
[Sun Jun 28 12:00:00.790088 2015] [core:warn] [pid 22089] AH00111: Config variable ${APACHE_RUN_GROUP} is not defined
[Sun Jun 28 12:00:00.790240 2015] [core:warn] [pid 22089] AH00111: Config variable ${APACHE_LOG_DIR} is not defined
[Sun Jun 28 12:00:00.794721 2015] [core:warn] [pid 22089:tid 140102153521024] AH00111: Config variable ${APACHE_LOG_DIR} is not defined
[Sun Jun 28 12:00:00.795136 2015] [core:warn] [pid 22089:tid 140102153521024] AH00111: Config variable ${APACHE_LOG_DIR} is not defined
[Sun Jun 28 12:00:00.795200 2015] [core:warn] [pid 22089:tid 140102153521024] AH00111: Config variable ${APACHE_LOG_DIR} is not defined
AH00526: Syntax error on line 74 of /etc/apache2/apache2.conf:
Invalid Mutex directory in argument file:${APACHE_LOCK_DIR}
注意:第一个站点加载良好,但第二个站点出现404错误。
首先,这几乎与REST问题无关。这是一个简单的配置错误。
其次,对于apache2 -t
,您应该先运行. /etc/apache2/envvars
,因为您需要加载一些envs变量。
然后是配置问题。
您正在定义两个基于命名的虚拟主机,一个名称为www.vlio20_paka.com
,一个名为www.vlio20_lb.com
。第一个是先定义的,所以如果您使用未知名称,默认情况下会使用它。
当你以这种方式进行查询时:
http://MACHINE_IP/lbServer
HTTP查询中使用的Host标头是MACHINE_IP
,因此它不是www.vlio20_paka.com
,也不是www.vlio20_lb.com
。如果没有其他默认的虚拟主机(使用apache2 -S
可以找到),则会使用第一个。
让我们看看第一个:
<VirtualHost *:80>
DocumentRoot /var/www/html/otherSite
ServerName www.vlio20_paka.com
Alias /otherSite /var/www/html/otherSite
</VirtualHost>
如果我们落在这里,在您的磁盘上搜索的路径将是DocumentRoot
+url
,因此是/var/www/html/otherSite/lbServer
。您有一个404,很可能这条路径不存在。
请注意,这里的Alias
指令只是简单地告诉Apachehttp://www.vlio20_paka.com/以及请求http://www.vlio20_paka.com/otherSite都指向/var/www/html/otherSite/
目录,可能不是您想要做的。
Alias
只是在url到文件系统映射上定义某种url符号链接的一种方法。
现在让我们来看看第二个VirtualHost,只有在HTTP请求中使用正确的名称,而不是请求时,您才能访问它http://MACHINE_IP/lbServer但是http://www.vlio20_lb.com/lbServer(为此,您可以在运行http查询的机器上的/etc/hosts文件中创建一个条目)。
<VirtualHost *:80>
DocumentRoot /var/www/lbserver/public
ServerName www.vlio20_lb.com
Alias /lbServer /var/www/lbserver/public
<Directory /var/www/lbserver/public>
AllowOverride all
DirectoryIndex index.php
Require all granted
</Directory>
</VirtualHost>
因此,在这里您在/var/www/lbserver/public
设置了一个DocumentRoot,但也通过Alias
告诉Apachehttp://www.vlio20_lb.com/lbServer/指向与http://www.vlio20_lb.com/.
你最好的解决方案是在/etc/hosts
中添加一个条目,请求你的测试网站使用实名,这样你就可以使用基于名称的VirtualHosting。或者只使用一个VirtualHost并尝试使用别名,但这通常与生产设置相去甚远。
我唯一想到的是没有看到更多配置。
更改:
<Directory /lbserver>
DirectoryIndex index.php
</Directory>
收件人:
<Directory /lbserver>
DirectoryIndex index.php
Require all granted
</Directory>
在ubuntu中没有二进制httpd,而是使用apache2:
ricardo@zeus:~$ httpd -t
No se ha encontrado la orden «httpd», quizás quiso decir:
La orden «xttpd» del paquete «xtide» (universe)
La orden «https» del paquete «httpie» (universe)
La orden «http» del paquete «httpie» (universe)
httpd: no se encontró la orden
ricardo@zeus:~$ apache2 -t
现在,粘贴命令输出;-)