原來使用Apache2.2,只要開啟使用rewrite模塊,在Drupal中:管理(admin)-站點設置(settings)-簡潔鏈接(Clean URLS)里,Drupal會自動檢測可以使用簡介鏈接,選擇啟用(enable),就會使用默認的.htaccess文件來完成簡潔鏈接的功能。
但是,當我把Apache2.2換為Lighttpd1.4.xx后,Drupal無法自動檢測是否可以使用簡潔鏈接功能。google一陣,發現解決的方法其實很簡單。
首先,修改Lighttpd配置文件,比如我使用Lighttpd目錄下的conf/lighttpd-inc.conf配置文件,那么就修改這個文件,開啟rewrite模塊:
server.modules = (
### 其他模塊

### rewrite模塊
"mod_rewrite"
)
參考Drupal默認的.htaccess文件里rewrite模塊部分:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
</IfModule>
看到沒有,只有一條RewriteRule,就是它了。那么怎么樣把它“移植”到Lighttpd的配置文件里呢?很簡單,在Lighttpd配置文件里添加:
#### url handling modules (rewrite, redirect, access)
url.rewrite = ( "^/cms/(.*)$" => "/cms/index.php?q=$1" )
然后進入Drupal目錄,修改sites/default/settings.php文件,在末尾處添加:
/**
* Clean URL
**/
$conf['clean_url']=1;
現在訪問http://wind/cms/,發現大部分功能都正常,比如用戶登錄。但是頁面很粗糙,多媒體文件(圖片什么的)和CSS排版都沒有加載,于是還需要增加一個RewriteRule,放在"^/cms/(.*)$" => "/cms/index.php?q=$1"的前面,現在的RewriteRule配置是這樣子的:
#### url handling modules (rewrite, redirect, access)
url.rewrite = ( "^/cms/(.*.gif|.*.png|.*.jpg|.*.pdf|.*.js|.*.css)" => "/cms/$1", "^/cms/(.*)$" => "/cms/index.php?q=$1" )
現在訪問http://wind/cms/,一切正常了哦!
WordPress的設置就更加簡單了,依然查看WordPress目錄下的.htaccess文件,查看Apache下WordPress的RewriteRule,在Lighttpd的rewrite模塊配置里添加一條RewriteRule,最后Drupal/WordPress的rewrite模塊配置是類似這樣子的:
#### url handling modules (rewrite, redirect, access)
url.rewrite = ( "^/blog/(archives|categories|comments|feed)/" => "/blog/index.php", "^/cms/(.*.gif|.*.png|.*.jpg|.*.pdf|.*.js|.*.css)" => "/cms/$1", "^/cms/(.*)$" => "/cms/index.php?q=$1" )
哈哈,是不是很簡單呢?不過要注意,在rewrite模塊配置之前請不要設置server.error-handler-404,不然只顯示404錯誤哦~
(注:我是在公司局域網里架設的服務器,主機域名為http://wind/,www根目錄為G:\pub。WinXP下Apache2/Lighttpd+PHP5+MySQL5做服務器。Lighttpd使用FastCGI。Drupal目錄為G:\pub\cms,WordPress目錄為G:\pub\blog。)