[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服務。