我有一台 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>
在我的公共(public)目录中,我有 .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
之前,因为您需要加载一些环境变量。
然后是配置问题。
您正在定义 2 个基于命名的虚拟主机,其中 1 个名称为 www.vlio20_paka.com
一个名称为 www.vlio20_lb.com
.第一个是首先定义的,因此如果您使用未知名称,默认情况下将使用它。
当您以这种方式进行查询时:
http://MACHINE_IP/lbServer
HTTP 查询中使用的 Host header 是
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
这里的指令只是告诉 Apache 一个对 http://www.vlio20_paka.com/ 的请求。并向 http://www.vlio20_paka.com/otherSite 提出请求都会指向 /var/www/html/otherSite/
目录,也许不是你想做的。Alias
只是一种在 url-to-filesystem 映射上定义某种 url 符号链接(symbolic link)的方法。现在让我们看看第二个 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>
因此,在这里您将 DocumentRoot 设置为
/var/www/lbserver/public
也可以通过 Alias
, 你告诉 Apache 一个请求到 http://www.vlio20_lb.com/lbServer/指向与 http://www.vlio20_lb.com/ 相同的条目.您最好的解决方法是在
/etc/hosts
中添加一个条目a 请求您的测试网站使用真实姓名,以便您可以使用基于名称的 VirtualHosting。或者只使用一个 VirtualHost 并尝试使用别名,但这通常与生产设置相去甚远。
关于php - 使用 apache2 (ubuntu) 为 php RESTful 服务器提供服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31097920/