ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
[TOC] ## **DocumentRoot must be a directory** 今天在修改了一下httpd.conf文件的DocumentRoot目录后重启了httpd服务,却发现报错了。 DocumentRoot must be a directory 。刚开始以为是自己配置有问题,后来检查了好一遍并确认配置的DocumentRoot就是一个directory啊。哎,只好baidu一下了。呵呵,看来遇到过这种报错的人还真不少啊。总结起来有两种可能导致了DocumentRoot must be a directory报错。 #### 1. DocumentRoot的目录配置中带有中文 如果你的DocumentRoot目录设置中有中文的话,请先修改成英文的试试吧。哈哈……如果还不行的话就请接着往下看吧。 #### 2. SELinux的安全策略搞得鬼啊 这是因为系统启用了SELinux安全策略之后会把目录或文件设成各种类型, 如home_root_t和user_home_t类型等。因些apache的进程就没有权限而无法访问你刚才设置的DocumentRoot了。针对 Apache的进程SELinux的安全策略规定只能访问 httpd_sys_content_t类型的目录或文件。所以把目录或文件的策略类型改成httpd_sys_content_t就可以了。修改命令如下: `chcon -R -h -t httpd_sys_content_t /data/coderbolg/` 可以用 ls -laZ 来查看目录的策略类型是否修改成功。做好了这一步如果还报错,呵呵……那还得往下看。 #### 3. 禁用SELinux 如果你真的被SELinux折磨的没有办法了。那就直接禁用SELinux吧。系统的不安全总比服务器不能访问的权重要低些吧。直接编辑SELinux的配置文件。 `vim /etc/sysconfig/selinux` 把SELINUX的值从enforcing改成disabled就行。存盘退出。这回一定可以了,如果还不可以就重启一下服务器吧。 ## 让Linux主机开启.htaccess支持 以前用的都虚拟主机,默认都是支持.htaccess的,而Linux中的centOS大多默认不支持.htaccess,而.htaccess重要性不言而喻。(**Xee**:有段时间弄phpcms v9,结果就是伪静态不行,原来是它没开启!) 国内的很多Linux型主机默认是不开启.htaccess的,从而导致不支持伪静态。而国外的虚拟主机基本上都是支持此服务的,我曾经问过国内的主机提供商为何不开启.htaccess服务,他们的回答很可笑,说是减轻服务器的负担,呵,这真是符合了中国的国情,真让你不知以何种语言反击之。 这里给一些菜鸟扫扫盲,很多站长都单纯的以为.htaccess就是伪静态,把.htaccess当成伪静态的代名词,以为.htaccess就起到.htaccess的作用,其实它的作用比你想象的大得多,出了伪静态,还有我们熟知的404啊、301跳转啊等,都可以通过.htaccess来实现,下面来给大家介绍一下如何在Linux型主机下开启.htaccess的支持,前提你有这个权限,一般这个针对的是服务器或者VPS,虚拟主机基本上是没门,除非你要求提供商帮你开启。另一种情况是有些童鞋在本地搭建PHP+MySQL+Apache的时候用得着此方法,本地的一键安装包有xampp和phpnow等,我个人推荐使用phpnow,简单易用,完全傻瓜式。如果你使用phpnow搭建的话你就不用往下看了,因为默认是开启的。 方法如下: **第一**:在Apache文件夹下的conf文件夹中找到httpd.conf,记事本或者类似的编辑工具打开后Ctrl+F查找“LoadModule rewrite_module”,找到“LoadModule rewrite_module modules/mod_rewrite.so”所在的那一行,确定这一行前面没有#,就说明已经加载了伪静态模块,假如这一行前面有#,请去掉,phpnow安装后默认是没有#的。 **第二**:让Apache服务器支持.htaccess,如何让自己的本地Apache服务器支持”.htaccess”呢?其实只要简单修改一下apache的httpd.conf设置就可以让支持.htaccess了。打开httpd.conf文件,用文本编辑器打开后,查找 ~~~ <Directory /> Options FollowSymLinks AllowOverride None </Directory> ~~~ 改为 ~~~ <Directory /> Options FollowSymLinks AllowOverride All </Directory> ~~~ 第一是确定是否已经加载了伪静态模块,第二是修改这一处的设置。操作完后测试一下.htaccess是否已生效,如还未生效,请重启Apache服务。