這兩天一直在弄一個php版的開源多使用者檔案上傳系統uploader6.21,安裝什麼的都沒有錯誤,但是登入或注冊是老是連結不對,找了幾個源碼下載下傳站下載下傳安裝均是如此,好在是開放源碼,花了我一天功夫把源碼拔了個遍也沒有找到菜單檔案在那地方,都快崩潰了,最後還是上官方論壇上找到了症結所在,原來伺服器不支援rewrite,是以出來的路徑不對。問題找出來就好辦了哈,下面是我從網上找來的技術方面的文章。
參考以下文章一開始進入了誤區,光在apache2.conf上修改就是沒效果,最後又參考了好幾篇文章,終于搞定。
過程如下:
修改 /etc/apache2/apache2.conf 檔案, 讓其加載 mod_rewrite 和 mod_deflate 子產品.
加載 mod_rewrite 子產品, 在檔案[底部]加入:
LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so
加載 mod_deflate 子產品, 在檔案[底部]加入:
LoadModule deflate_module /usr/lib/apache2/modules/mod_deflate.so
除了加載子產品以外,還需要修改虛拟主機的配置檔案.
預設的配置檔案為:
/etc/apache2/sites-available/default
将檔案中代表網站的節點,如放在 /var/www 的網站為: (這個檔案在sites-available裡)
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
# This directive allows us to have apache2's default start page
# in /apache2-default/, but still have / go to the right place
#RedirectMatch ^/$ /apache2-default/
</Directory>
将其 AllowOverride None 中的 None 改成 All
轉載開始
最近,項目需要在已經編譯好的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
最近,項目需要在已經編譯好的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
下載下傳位址:ftp://ftp.gnu.org/gnu/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
全文結束。
參考原文
============================
現在列下幾個要點:
安裝步驟: 進入安裝目錄,./configure; make; make install; make install-compat; 否則無法編譯出ndbm.h頭檔案.
2. 然後用Apache bin目錄下的apxs指令安裝
/var/apache/bin/apxs -c mod_rewrite.c {
gcc -DLINUX=22 -DUSE_HSREGEX -DUSE_EXPAT -I../lib/expat-lite -fpic -DSHARED_MODULE -I/var/apache/include -c mod_rewrite.c
gcc -shared -o mod_rewrite.so mod_rewrite.o -lgdbm
}
/var/apache/bin/apxs -i -a -n mod_rewrite mod_rewrite.so
然後在http.conf配置檔案裡加上:LoadModule rewrite_module libexec/mod_rewrite.so
接下來用/usr/local/apache/bin/apachectl
stop停止apache,然後用再start,千萬注意,在這裡不能用restart或者graceful參數來重新啟動apache,必須先停止,然後再開始,或者是reboot機器,否則rewrite将不起作用。
-------------------------------------------------------------------------------------------------------------
I tried to include in my Apache Web server's configuration the mod_rewrite module, but when I restarted the server, I received an error:
Cannot load /usr/local/apache/libexec/mod_rewrite.so into server:
/usr/local/apache/libexec/mod_rewrite.so: undefined symbol: dbm_fetch
The problem, as it turns out, is that mod_rewrite.so is compiled incorrectly. It should be linked with a dbm library but it isn't.
If you have an up-to-date set of Apache source files, you can easily solve this problem by manually rerunning the last compilation step of this module, using the correct options. When you execute make mod_rewrite.so in the appropriate directory, it performs this final step:
gcc -shared -o mod_rewrite.so mod_rewrite.lo
Rerun gcc, this time adding a reference to the GNU gdbm library:
gcc -shared -o mod_rewrite.so mod_rewrite.lo -lgdbm
Next, copy the newly created mod_rewrite.so over to /usr/local/apache/libexec or wherever your Apache module files are located.
In my case, this was all that was needed to solve the problem. Your mileage may vary.
轉自:http://www.phpchina.cn/bbs/viewthread.php?tid=96