開啟apache的mod_rewrite功能

wangzhensheng發表於2007-05-17
首先來重新編譯安裝apache-2.0.59

#tar -zxvf httpd-2.0.59.tar.gz
#cd httpd-2.0.59
#./configure --prefix=/opt/apache2 --enable-so --enable-module=rewrite --enable-shared=rewrite --enable-shared=max
#make
#make install
[@more@]

下面介紹一下怎樣開啟apache的mod_rewrite功能。
zhy1899
聖騎士
會員UID:131228
註冊時間:2004-2-7 09:54
最後登入:2007-5-17 10:13
帖子總數:
精華帖子: 0
積分:91

線上狀態:...離線...

首先來重新編譯安裝apache-2.0.59

#tar -zxvf httpd-2.0.59.tar.gz
#cd httpd-2.0.59
#./configure --prefix=/opt/apache2 --enable-so --enable-module=rewrite --enable-shared=rewrite --enable-shared=max
#make
#make install

apache安裝完畢,下面來載入編譯mod_rewrite.so這個模組。

#cd /soft/httpd-2.0.59/modules/mappers
#/opt/apache2/bin/apxs -c mod_rewrite.c -lgdbm
#gcc -shared -o mod_rewrite.so mod_rewrite.o -lgdbm
#/opt/apache2/bin/apxs -i -A -n rewrite mod_rewrite.so





最近,專案需要在已經編譯好的Apache上以動態方式載入rewrite模組。於是,我們在網上找了許多資料,但都講解得不是很詳細且格式錯位問題嚴重。所以我們有必要把這一過程再重述一遍。實際操作步驟如下:

工作現場描述:
Linux 2.4.21
apache_1.3.34.tar.gz 解壓後的目錄為 /root/apache_1.3.34 文中簡稱為“原始碼目錄”
apache安裝目錄 /usr/local/apache 文中簡稱為“目標目錄”

步驟:
1、Apache安裝rewrite模組的時候需要DBM支援,否則無法編譯,所以首先要安裝一個GDBM
下載地址:
安裝步驟:
進入安裝目錄,
./configure
make
make install
make install-compat (最後行也要執行。否則無法編譯出ndbm.h標頭檔案)
如果您不能確定伺服器上是否已經裝有DBM,那麼可以安裝一下。否則這步可以跳過。

2、現在到apache原始碼目錄的標準模組目錄中(/root/apache_src/src/modules/standard/)中,使用如下指令編譯出so檔案:
/usr/local/apache/bin/apxs -c mod_rewrite.c -lgdbm
  即可得到mod_rewrite.so檔案。
備註:"-lgdbm"是用為說明在編譯mod_rewrite.c時要把gdbm連結進來。這樣在第6步啟動apache時就不會報出"dbm fetch"的錯誤了。

3、現在讓apache的apxs來自動向http.conf配置檔案中加入LoadModule語句並將mod_rewrite.so檔案複製到apache/libexec目錄
/usr/local/apache/bin/apxs -i -A -n rewrite /root/apache_1.3.34/src/modules/standard/mod_rewrite.so
備註:命令中的rewrite引數是告訴apxs命令mod_rewrite.so檔案中的模組名。在命令執行後,apxs會在LoadModule中為rewrite加上"_module"以標名模組名稱。如果你在啟動apache時發現總是給出“不能定位API”之類的錯誤,那就是說明LoadModule後面的模組名的語法要根據您的apache版本加以改變。

4、停止apache
apache/bin/apachectl stop

5、執行配置檔案檢查命令
apache/bin/apachectl configtest
如顯示Syntax OK,則表示整個操作成功。那麼可以到第6步。否則根據提示資訊進行除錯。但只要按照此文所說進行操作是不會出錯的。

6、啟動apache
apache/bin/apachectl start

現在檢視phpinfo的資訊

Loaded Modules mod_dir mod_imap mod_actions mod_userdir mod_alias mod_rewrite mod_so sapi_apache2

表明我的機器就支援rewrite了,但是我的dz怎麼不能靜態呢?
要修改以下配置
1.在配置檔案(通常就是 conf/httpd.conf)中加入如下程式碼

RewriteEngine On
RewriteRule ^(.*)/archiver/([a-z0-9-]+.html)$ $1/archiver/index.php?$2
RewriteRule ^(.*)/forum-([0-9]+)-([0-9]+).html$ $1/forumdisplay.php?fid=$2&page=$3
RewriteRule ^(.*)/thread-([0-9]+)-([0-9]+)-([0-9]+).html$ $1/viewthread.php?tid=$2&extra=page%3D$4&page=$3
RewriteRule ^(.*)/profile-(username|uid)-(.+).html$ $1/viewpro.php?$2=$3

RewriteEngine On
RewriteRule ^archiver/([a-z0-9-]+.html)$ archiver/index.php?$1
RewriteRule ^forum-([0-9]+)-([0-9]+).html$ forumdisplay.php?fid=$1&page=$2
RewriteRule ^thread-([0-9]+)-([0-9]+)-([0-9]+).html$ viewthread.php?tid=$1&extra=page%3D$3&page=$2
RewriteRule ^profile-(username|uid)-(.+).html$ viewpro.php?$1=$2

儲存。
2.檢查論壇所在目錄中是否存在 .htaccess 檔案,如果不存在,請手工建立此檔案。檔案內容為:

RewriteEngine On
# 修改以下語句中的 /discuz 為你的論壇目錄地址,如果程式放在根目錄中,請將 /discuz 修改為 /
RewriteBase /

RewriteRule ^archiver/([a-z0-9-]+.html)$ archiver/index.php?$1
RewriteRule ^forum-([0-9]+)-([0-9]+).html$ forumdisplay.php?fid=$1&page=$2
RewriteRule ^thread-([0-9]+)-([0-9]+)-([0-9]+).html$ viewthread.php?tid=$1&extra=page%3D$3&page=$2
RewriteRule ^profile-(username|uid)-(.+).html$ viewpro.php?$1=$2

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8806316/viewspace-915342/,如需轉載,請註明出處,否則將追究法律責任。

相關文章