对Apache其实并不是非常了解,纯小白,只是环境里需要搭建一个简单的站点,就使用了该服务,但是在配置过程中出现了403、404错误,经过好久才搞定,特记录一下,以示提醒。
环境:
Ubuntu 16.04
Apache 2.4
Apache目录:/usr/local/apache2
跳转目录:/home/test/apidoc
预期效果:
首页还是使用Apache自带的htdocs下的index.html
但是需要从该首页,分别跳转到其他目录下的index.html
问题1:404 Not Found
修改/usr/local/apache2/htdocs
下的index.html文件:
<html>
<body>
<div>
<a href="/home/test/apidoc">Testa>
div>
body>
html>
启动Apache服务成功,访问首页,也可以访问,但是点击跳转的链接,就会提示:
Not Found
The requested URL /home/test/apidoc was not found on this server.
额,觉得好奇怪,目录的确存在,而且/home/test/apidoc
下也存在index.html文件,为啥从首页访问这种跳转过去的就不行呢?
在度娘里搜寻了半天,终于明白了大概的意思,是需要修改conf配置文件,于是参考首页的配置增加了一段配置:
<Directory "/home/test/apidoc">
Options Indexes
AllowOverride None
Require all granted
Directory>
但是重启服务后,访问首页,点击跳转链接,问题依旧!
网上的解决方案,大部分都是说的要调整
下的权限,最多是区分了2.2版本和2.4版本的不同,但是无论怎么尝试,问题都依旧,始终是返回404!
自己走了好多弯路,回头来看官方文档,虽然是英文版本,但是通过“用户指南-从URL映射到文件系统”章节,可以发现,其实归根结底,是我们在设置除DocumentRoot
外的目录时,需要使用Alias
标签,所以修改上面的配置为:
Alias "/apidoc" "/home/test/apidoc"
<Directory "/opt/disk2/var/www/mvm_tembin_api/apidoc">
Options Indexes
AllowOverride None
Require all granted
Directory>
然后修改/usr/local/apache2/htdocs/index.html
为:
<html>
<body>
<div>
<a href="/apidoc">Testa>
div>
body>
html>
重启Apache服务后,再次访问首页,点击跳转链接,成功,问题解决。
仔细想想,其实就是对于目录权限的控制问题,如果简单来理解这个问题,还有一个办法也可以解决问题,即不用修改配置文件,而是在htdocs目录下,增加链接文件,因为htdocs目录下的内容访问是没有问题,通过软链接来实现:
ln -s /home/test/apidoc ./apidoc
配置文件里去掉Alias一段,然后别的不动,重启服务,问题解决,效果一样!
只是本人其实也不知道这种解决办法,是否会引入其他问题或风险,如果有请大家指正。
问题2:403 Forbidden
遇到这个问题的根本原因还是在于权限控制有误,对根目录和首页所在目录的权限,保持默认,不要进行修改即可。