LearnHouse

Archive for the 'Linux' Category

最簡便的備份MySql資料庫方法

為了同步兩個系統的程式與資料庫,因此用phpmyadmin把資料庫匯出成SQL檔

然後在備援Server匯入!!搞了好久的資料庫!!怎麼用都會有亂碼

從所有的環境變數開刀,對照了系統語系、MySQL語系、資料庫資料表、與phpmyadmin設定

都改成相同了可是就是有問題,後來找出原因是因為我太依賴phpmyadmin的匯出功能了

所以導致匯入到另外一個資料時是錯誤的編碼格式

以下是用mysqldump所匯出來的資料庫備份時所可以用的選項

其實說穿了只是用--help可以看到的所有選項參數

不過以下這篇的選樣說明是中文的,給有需要的人參考看看吧!!

使用MYSQL進行資料庫備份,有很正規的資料庫備份方法,同其他的資料庫伺服器有相同的概念,但有沒有想過,MySQL會有更簡捷的使用檔目錄的備份方法,而且又快有好。  
 
一、資料備份捷徑  
 
因為這個方法沒有得到官方正式文檔的驗證,我們暫稱為試驗吧。  
 
目的:備份hostA主機中一個mysql資料庫TestA,並恢復到到hostB機中  
 
試驗環境:  
 
作業系統:WinNT4.0,Mysql3.22.34,phpMyAdmin 2.1.0  
 
在hostA中安裝mysql資料庫並建立TestA資料庫  
 
hostB機安裝mysql資料庫,沒有TestA資料庫  
 
方法步驟:  
 
啟動phpMyAdmin察看HostA和HostB中的資料庫列表,在HostB中沒有TestA資料庫  
 
找到HostA中mysql的安裝目錄,並找到資料庫目錄data  
 
在我的試驗環境中,這個目錄是  
 
C:mysqldata  
 
找到對應資料庫名稱的子目錄  
 
C:mysqldataTestA  
 
粘貼拷貝到HostB的Data目錄下,是HostA同HostB Mysql資料目錄下的檔相同  
 
刷新HostB的phpMyAdmin察看一下資料庫列表,我們看到TestA已經出現,並且作查詢修改等操作都正常,備份恢復恢復成功  
 
試驗結論:Mysql的資料庫可以通過檔形式保存,備份,恢復只要將相應檔目錄恢復即可,無需使用其他工具備份。  
 
二、正規的方法(官方建議):  
 
導出要用到MySQL的mysqldump工具,基本用法是:  
 
          

代碼:
mysqldump [OPTIONS] database [tables]  


 
如果你不給定任何表,整個資料庫將被導出。  
 
通過執行mysqldump --help,你能得到你mysqldump的版本支援的選項表。  
 
注意,如果你運行mysqldump沒有--quick或--opt選項,mysqldump將在導出結果前裝載整個結果集到記憶體中,如果你正在導出一個大的資料庫,這將可能是一個問題。  
 
mysqldump支援下列選項:  
 
--add-locks  
 
在每個表導出之前增加LOCK TABLES並且之後UNLOCK TABLE。(為了使得更快地插入到MySQL)。  
 
--add-drop-table  
 
在每個create語句之前增加一個drop table。  
 
--allow-keywords  
 
允許創建是關鍵字的列名字。這由在列名前面加表名的方法做到。  
 
-c, --complete-insert  
 
使用完整的insert語句(用列名字)。  
 
-C, --compress  
 
如果客戶和伺服器均支援壓縮,壓縮兩者間所有的資訊。  
 
--delayed  
 
用INSERT DELAYED命令插入行。  
 
-e, --extended-insert  
 
使用全新多行INSERT語法。(給出更緊縮並且更快的插入語句)  
 
-#, --debug[=option_string]  
 
跟蹤程式的使用(為了調試)。  
 
--help  
 
顯示一條幫助消息並且退出。  
 
--fields-terminated-by=...  
 
--fields-enclosed-by=...  
 
--fields-optionally-enclosed-by=...  
 
--fields-escaped-by=...  
 
--fields-terminated-by=...  
 
這些選擇與-T選擇一起使用,並且有相應的LOAD DATA INFILE子句相同的含義。  
 
LOAD DATA INFILE語法。  
 
-F, --flush-logs  
 
在開始導出前,洗掉在MySQL伺服器中的日誌檔。  
 
-f, --force,  
 
即使我們在一個表導出期間得到一個SQL錯誤,繼續。  
 
-h, --host=..  
 
從命名的主機上的MySQL伺服器導出資料。缺省主機是localhost。  
 
-l, --lock-tables.  
 
為開始導出鎖定所有表。  
 
-t, --no-create-info  
 
不寫入表創建資訊(CREATE TABLE語句)  
 
-d, --no-data  
 
不寫入表的任何行資訊。如果你只想得到一個表的結構的導出,這是很有用的!  
 
--opt  
 
同--quick --add-drop-table --add-locks --extended-insert --lock-tables。  
 
應該給你為讀入一個MySQL伺服器的盡可能最快的導出。  
 
-pyour_pass, --password[=your_pass]  
 
與伺服器連接時使用的口令。如果你不指定“=your_pass”部分,mysqldump需要來自終端的口令。  
 
-P port_num, --port=port_num  
 
與一台主機連接時使用的TCP/IP埠號。(這用於連接到localhost以外的主機,因為它使用 Unix套接字。)  
 
-q, --quick  
 
不緩衝查詢,直接導出至stdout;使用mysql_use_result()做它。  
 
-S /path/to/socket, --socket=/path/to/socket  
 
與localhost連接時(它是缺省主機)使用的套接字檔。  
 
-T, --tab=path-to-some-directory  
 
對於每個給定的表,創建一個table_name.sql檔,它包含SQL CREATE 命令,和一個table_name.txt檔,它包含資料。 注意:這只有在mysqldump運行在mysqld守護進程運行的同一台機器上的時候才工作。.txt檔的格式根據--fields-xxx和-- lines--xxx選項來定。
 
-u user_name, --user=user_name  
 
與伺服器連接時,MySQL使用的用戶名。缺省值是你的Unix登錄名。  
 
-O var=option, --set-variable var=option  
 
設置一個變數的值。可能的變數被列在下面。  
 
-v, --verbose  
 
冗長模式。列印出程式所做的更多的資訊。  
 
-V, --version  
 
列印版本資訊並且退出。  
 
-w, --where='where-condition'  
 
只導出被選擇了的記錄;注意引號是強制的!  
 
"--where=user='jimf'" "-wuserid>1" "-wuserid<1"  
 
最常見的mysqldump使用可能製作整個資料庫的一個備份:  
 
          

代碼:
mysqldump --opt database > backup-file.sql  


 
但是它對用來自於一個資料庫的資訊充實另外一個MySQL資料庫也是有用的:  
 
          

代碼:
mysqldump --opt database | mysql --host=remote-host -C database  


 
由於mysqldump導出的是完整的SQL語句,所以用mysql客戶程式很容易就能把資料導入了:  
 
          

代碼:
mysqladmin create target_db_name  
 
mysql target_db_name < backup-file.sql  


 
http://tech.ccidnet.com/art/1105/20050804/303341_1.html
http://ria.richtechmedia.com/category/phpmysql/

 

 

 

posted by admin in Linux and have No Comments

SQL Server資料匯入MySQL

相信這個問題拜託google大師後會有很多種解法

可是符合需求又簡單的卻沒幾種

而且可分自行寫程式的或是利用軟體轉換 

但偏偏寫程式的方式我怎麼使用都沒辦法正常連線到SQL Server

後來找到了一個方法,不用寫程式就能轉換,而且可以自訂排程 

首先要先下載 MySQL Connector/ODBC

在SQL Server端安裝,這裡的設定以Windows Server 2003為主

安裝完後就開始設定如何連結MySQL,開始→程式及→系統管理工具→資料來源 (ODBC)

切換到系統資料來源名稱,按新增

 

找到MySQL ODBC 3.51 Driver後點選並按完成

 

根據下面圖的指示填入,並選擇所要匯入的資料庫後按OK,若有出現錯誤點選Diagnostics看錯誤訊息

 

再來開始就是要匯資料了,開始→程式集→Microsoft SQL Server→Enterprise Manager,找到你要匯出的資料庫與資料表

在要匯出的資料表按右鍵選 所有工作→匯出資料

 

點選下一步,資料來源選擇Microsoft OLE DB Provider for SQL Server

伺服器選local,並使用Windows的帳戶驗證,資料庫選擇想匯出的資料庫

 

點選下一步,目的地選擇MySQL ODBC 3.51 Driver,使用者/系統 DSN下拉會有當初設定的名稱

 

點選下一步,複製來源資料庫的資料表與檢視表

 

點選下一步,選擇SQL Server中哪些資料表要轉到MySQL並按下一步執行,就可以成功匯進去了

後記

由於匯出來的資料中文是BIG5編碼,因此若MySQL資料表規劃是以UTF-8為編碼格式

可以寫一程式讓他全部轉換成UTF-8,可利用iconv函數去轉換中文的部份 

posted by admin in Linux and have Comments (7)

Linux下也能讀取硬碟ntfs partition

其實這已經不是什麼新的東西了,在兩年前我就一直在使用

不過兩年前我的部落格還沒成立,所以一直沒有記錄下來

這幾天因為寫程式的需求,把逐漸快被我遺忘的linux找回來

為了娛樂方便,我幾乎也都運行在WIN下,除非工作或學業上需求才會開啟linux

而今天寫這篇主要就是為了更改kerne以方便讀取ntfs的檔案

下載與安裝

下載網址www.linux-ntfs.org,如果是使用RedHat系列的,可直接在此下載RPM

下載前先使用uname -r 指令觀看現行的linux版本 ,找符合您現在的版本

找到之後再來就是選擇CPU了,在CPU等級大多數不是Pentium III就是Pentium 4以上,所以下載i686的

NTFS掛載

mount -t ntfs /dev/hda5 /mnt/windisk/

我是把硬碟的partition掛載在mnt底下的windisk目錄

若不知道你要掛載的ntfs  partition代號是說少可用fdisk -l查詢

 

再來切換到windisk的目錄底下就可以看到winxp的檔案了

 

posted by admin in Linux and have Comments (8)

vsftpd安裝

由於很忙越來越沒時間寫網誌了

最近要寫一個轉換資料庫的程式

卻發現在校外無法直接連結到SQL Server

因此架設ftp以方便直接上傳後執行!! 

1.下載與安装
wget ftp://vsftpd.beasts.org/users/cevans/vsftpd-2.0.5.tar.gz
tar zxvf vsftpd-2.0.5.tar.gz
cd vsftpd-2.0.5
make
make install

2.配置與編輯
cp vsftpd.conf /etc/;
cp RedHat/vsftpd.pam /etc/pam.d/ftp
/etc/vsftpd.conf
新增:listen=YES
ps.無新增會出現not configured for standalone, must be started from inetd錯誤訊息
 
3.啟動服務
/usr/local/sbin/vsftpd &
ps.若出現500 OOPS: could not bind listening IPv4 socket訊息請確認是否有其他的ftp程序正在執行
確認方式可用telnet 127.0.0.1 21

mkdir /var/ftp
chmod og-w /var/ftp
 
4.vsftpd.conf 設定值
設定方式可參閱man vsftp.conf,還有更多的客制化設定,在此只列出站長使用的設定

與主機較相關的設定值
listen=YES #vsftpd以standalone 的方式來啟動
listen_port=21 #可在此設定使用非正規埠號(只能用stand alone 的方式啟動,super daemon 無效)
pasv_enable=YES #啟動被動式連線模式(passive mode)
write_enable=YES #如果你允許使用者上傳資料時,就要啟動這個設定值
use_localtime=YES #是否使用本地時間?vsftpd 預設使用 GMT 時間(格林威治),所以會比台灣晚 8 小時
與實體用戶相關設定值
local_umask=022 #新增目錄、檔案權限為 775,因為 umask 為 002
local_enable=YES #在 /etc/passwd 內的帳號才能以實體用戶的方式登入vsftpd 主機
與系統安全相關設定值 
xferlog_enable=YES #使用者上傳與下載檔案都會被紀錄起來。記錄的檔案與下一個設定項目有關
xferlog_file=/var/log/vsftpd.log #如果上一個 xferlog_enable=YES 的話,這裡就可以設定了
pam_service_name=vsftpd #這個是 pam 模組的名稱,我們放置在 /etc/pam.d/vsftpd
 
posted by admin in Linux and have Comments (2)

XAMPP for Linux 安裝步驟

慣用了Appserv後,這次接學校的moodle系統

學長推薦是使用XAMPP這套整合的軟體

而且它的功能與方便性似乎比Appserv好很多!!

因此就轉貼一下官方的4大安裝步驟,資料來源為XAMPP官方

    * 步驟 1: 下載

只要點選下面的連結之一就可以了。下載最新的版本應該是比較好的。

也可以在 SourceForge,取得完整的下載列表(包含較舊的版本)。

你可以在 發佈說明 ,取得關於所有XAMPP版本的變更和內容的詳細概要。

* 步驟 2: 安裝

下載完成後,只要輸入下列命令:

  1. 進入Linux命令模式,切換成為系統管理者:

    su

  2. 將下載的壓縮檔解壓縮到 /opt下:

    tar xvfz xampp-linux-1.6.2.tar.gz -C /opt

    注意:請使用這些指令來安裝XAMPP,不要使用任何微軟作業系統底下的工具程式來解壓縮檔案, 它會使得程式無法正確執行。

    注意2:這個指令會覆蓋掉舊有的XAMPP版本。

這樣就完成了。XAMPP現在已經安裝在 /opt/lampp 目錄下了。

* 步驟 3: 啟動

要啟動XAMPP只要執行下列的指令:

/opt/lampp/lampp start

現在在你的畫面上,你會看到類似下方的這些訊息:

Starting XAMPP 1.6.2...
LAMPP: Starting Apache...
LAMPP: Starting MySQL...
LAMPP started.

Apache 和 MySQL 現在已經啟動了。

如果有任何錯誤訊息,請先到 Linux FAQ 查看是否有相關資料。

自XAMPP 1.4.7起的補充說明

因為一些非常新的版本如PHP 5也值得關注,因此我們決定將PHP 5.x和 PHP 4.x兩個版本都整合進XAMPP中。 因此如果你發現你的PHP應用程式無法在PHP 5下執行,那麼你可以輕易的將PHP切換回4.x的版本。

使用下列指令你可以將PHP切換回 4.x:

/opt/lampp/lampp php4

當然使用下列指令你可以在把PHP切換回 5.x:

/opt/lampp/lampp php5

如果你忘記了現在的PHP是那個版本,只要使用phpinfo()或是透過下列的指令就可以得知:

/opt/lampp/lampp phpstatus

* 步驟 4: 測試

好了,看起來好像很簡單,但是你要怎樣知道是否所有的軟體都正確的執行呢? 只要在網址列輸入下面的URL:

http://localhost

現在你應該會看到XAMPP的起始畫面,裡面包含一些檢查系統狀態的連結和一些簡單的範例程式。

即時藝術範例:一個小型的PHP/GD程式(自0.9.6prel版起,同時也有一個PHP/Ming的Flash範例,請參考截取畫面) 特別感謝 Anke Arnold所提供的»AnkeCalligraph«字型。

使用說明

* 關於系統安全(一定要閱讀)

如同前面所提,XAMPP並不建議用在實際上線運作系統,它的目地只是提供程式開發者一個開發的環境。 XAMPP設定的方式是盡可能的開放和允許所有程式開發者所想要的功能。 這樣的設定對於開發環境來說是很棒的,但對一個實際上線運作系統卻是非常危險的。

 

這裡是一份XAMPP缺乏安全防護的列表:

  1. MySQL的系統管理者(root)沒有密碼。
  2. MySQL可以透過任何網段加以存取。
  3. ProFTPD 的使用者"nobody",預設密碼是"lampp"。
  4. PhpMyAdmin可以透過任何網段加以存取。
  5. 範例程式也可以透過任何網段加以存取。

要修正大部份的系統安全弱點,只要執行下面的指令:

/opt/lampp/lampp security

它會開始一些系統安全檢查,同時使XAMPP的安裝環境變得更安全些。

* 進階的啟動和停止參數

0.9.4版的 /opt/lampp/lampp只能單獨啟動和停止XAMPP。但自0.9.5版後它可以執行許多進階的指令。

 

進階的啟動和停止參數
參數 描述
start 啟動XAMPP。
stop 停止XAMPP。
restart 重新啟動XAMPP。
startapache 單獨啟動Apache。
startssl 以SSL模式啟動Apache。這個指令將會使SSL的模式一直持續下去, 例如:如果你以SSL的模式啟動過XAMPP,那麼每一次都將以SSL的模式啟動Apache。
startmysql 單獨啟動MySQL資料庫
startftp startftp 啟動ProFTPD伺服器。你可以使用FTP來上傳檔案到網頁伺服器中(帳號"nobody",密碼"lampp")。 這個參數將會使ProFTPD每次都自動啟動,因此未來每次你啟動XAMPP,FTP的功能也會跟著啟動。
stopapache 停止Apache。
stopssl 停止以SSL模式執行的Apache。這個指令會持續的將SSL功能停用, 因此如果你重新啟動XAMPP,SSL功能仍然是處於停止狀態的。
stopmysql 停止MySQL資料庫。
stopftp 停止ProFTPD伺服器。這個命令會使ProFTPD持續停用,因此如果你重新啟動XAMPP,FTP功能仍然是處於停止狀態的。
security 啟動檢查系統安全的小程式。
舉例說明:如果你要以SSL模式啟動Apache,只要輸入下列指令(以root的身份):

/opt/lampp/lampp startssl

現在你可以透過SSL的方式來存取Apache伺服器 https://localhost

* 什麼程式在那裡?

在典型的Unix系統裡並沒有所謂的系統設定或管理介面,而僅有所謂的設定檔案, 下表是包含在XAMPP中的相關軟體設定檔案概要。

 

重要檔案和目錄
檔案/目錄 用途
/opt/lampp/bin/ XAMPP指令的家目錄。例如 /opt/lampp/bin/mysql 用來執行MySQL。
/opt/lampp/htdocs/ Apache 文件根目錄。
/opt/lampp/etc/httpd.conf Apache設定檔案。
/opt/lampp/etc/my.cnf MySQL設定檔案。
/opt/lampp/etc/php.ini PHP設定檔案。
/opt/lampp/etc/proftpd.conf ProFTPD設定檔案。(從 0.9.5版後才有)
/opt/lampp/phpmyadmin/config.inc.php phpMyAdmin設定檔案。

* 停止 XAMPP

要停止XAMPP只要執行下列指令:

/opt/lampp/lampp stop

你應該會看到:

Stopping LAMPP 1.6.2...
LAMPP: Stopping Apache...
LAMPP: Stopping MySQL...
LAMPP stopped.

這樣XAMPP就已經停止了。

* 移除

使用下面指令來移除XAMPP:

 

rm -rf /opt/lampp

這樣就完成了。

posted by admin in Linux and have Comment (1)

.htaccess 簡介與常用功能

以下內容是轉貼於我的舊部落格中的一篇文章

資料來源網站建置百寶箱

剛好最近遇到一點類似的問題,因此就貼出來和大家一起分享 

.htaccess 檔是 acache http 伺服器上的一個設定檔。
一般來說,管理人員都會開放部份功能給你自行設定,也有的會完全關閉對 .htaccess 的支援。

  1. 設定網頁密碼;
  2. 設定發生錯誤時出現的文件;
  3. 改變首頁的檔案 (index.html);
  4. 禁止讀取檔案;
  5. 重新導向文件;
  6. 加上 MIME 類別;
  7. 防止列出目綠內的檔案..等等

其實還有很多功能,不過一般只會開放一般功能給你用 (除非你是管理員...),而我也不識那麼多。所以我只說一般會用到的功能。

【.htaccess 簡介 】

.htaccess 是一個文字檔,你可以做任何好像 notepad 的文字編輯器去寫一個。
或者你會對 .htaccess 這個名字有點困惑,其實 .htaccess 是一個完全的檔案名, 不是 filaname.htaccess 或者甚麼的(當然也有管理員故意把它設定成其他名字,但一般都是用 .htaccess 的)。 為何是 .htaccess?因為所有以 "." 開頭的檔名在 *nix 系統中也是有屬性隱藏的,平常列出資料夾時不會出現,所以保安會好一點。 你可能會問:『MS Windows 要我一定給它一個名字,如何把它存檔成為 .htaccess?』 其實方法有兩個。 第一個是到 ms-dos 的視窗中,按 ren filename.xxx .htaccess 就可以了;第二個是在上傳到伺服器時才改名做 .htaccess。
而 .htaccss 內設定的格式是一行一個指令,如果你的 notepad 設定了自動換行的話,請關上它,這樣會比較安全。
一點要注意, .htaccess 是 apache 的產物,不是 IIS 的。IIS 伺服器不支援它,也就是說你不能以簡單地上傳一個 ASCII 檔去設定在 IIS 伺服器上的 http 服務。
在上載 .htaccess 時,必需使用 ASCII 模式!你或許還要 chmod 它到 644(RW_R__R_)。
每一個放了 .htaccess 的目錄和它的子目錄都會被 .htaccess 影響。如果我在 /abc/ 放了一個 .htaccess,那麼 /abc/ 和 /abc/def/ 內所有 file 都會被它影響,但 /index.html 不會被它影響 ←← 這一點是很重要的。

【密碼保護 】

這是最常見 .htaccess 被使用的功能之一,資料夾密碼保護。
這種方法可以使沒有授權的瀏覽者不能進入你所設定的限制區域,使用了 Javacript 設的密碼太簡單了,一下字就會被破解,而使用 .htaccess 系統就比使用 CGI 程式保護會員專頁將更為有效,更安全。更重要的是使用 .htaccess 方式去設定不需要編寫程式的技能。
首先,你要開啟一般文字編輯工具,做出一個名叫 .htpasswd 的檔名(當然又可能是其他,但一般伺服器都會設定 .htpasswd 是不能經由 http 讀到的。 檔案中的的每一句代表一個使用者,使用者名稱以及加密了的密碼是以冒號(:)分隔。而密碼必須經過加密才可以使用。 加密的方法是一般密碼使用了的 crypt,如果你不知如何加密,請到以下的網頁。
UHome
http://www.euronet.nl/~arnow/htpasswd/

注: Win32 版本的 apache 好像不支援用了 crypt 加密法的密碼檔,只支援 SHA1 和 MD5 的。 如果你是使用 apahce for win32 版本,請使用 C:Program FilesApache GroupApachebinhtpasswd.exe 做出以 MD5 加密的密碼檔!!

再在 .htaccess 中,加上以下句子

AuthName MemberPage
AuthType Basic
AuthUserFile /absolute/path/.htpasswd
require valid-user

AuthName 就是當 browser 得知要密碼時所出現的句字,你可以自行改動 MemberPage; 而第二句的 AuthType Basic 就千萬不要去改; 第三句的 AuthUserFile 就是設定所使用的 .htpasswd 檔,要留意它好像必需是在伺服器上的絕對路徑。 請留意,這不是 URL 的位置、也不一定是在 ftp 中看到的位置、就算是由 CGI 自行測到的路徑也未必準確,請細看伺服器上的說明 (例如在 virtualave.net,URL 是 /.htpasswd ftp 看到的是 /public_html/.htpasswd,CGI 測到 /home/public_html/.htpasswd,但是事實上你要設定路徑為 /data1/virtualave.net/USERNAME/public_html/.htpasswd)。
為了保安理由,不建議把 .htpasswd 放到可以用 http 去到的目錄;
最後的 require 就是命令伺服器誰可以進入,require valid-user 就是指只要是 .htpasswd 中的任何一人就可了; 你也可以指定在名單上只有某人可以通過,require user username 或 require user username1 username2 username3; 也可以指定是某組人才可以,require group groupname

而設定組的方法是再做一個叫 .htgroup 的文字檔,內容如下:

groupname1: username1 username2 username3
groupname2: username1 username3 username4

再在 .htaccess 中加多一句 AuthGroupFile /absolute/path/.htgroup 和 .htpasswd 的方法一樣,我不再說了。

以 ASCII 模式上傳所有檔案後,在那個資料夾中所有檔案都會被保護。
而再進一步,我們更可以設定個別設定只有某個檔案會密碼,不同檔案要不同的密碼,但是我會晚一點才說。


【自設錯誤報告文件 】

想做到好像 www.microsoft.com 一樣, 找不到文件不只是幾句白底黑字,也不是 IE 本身那個有 bug 的 "找不到網頁",而是另一頁 HTML 文件嗎?
逢法很簡單,首先寫一頁說找不到文件的 HTML,再用 notepad 打開您的 .htaccess。在最後加上一句

ErrorDocument 404 404.html

404.html 是錯誤檔案路經,即所顯示的檔案;404 是錯誤碼。以下就是一般會見到的錯誤碼和所代表的錯誤原因。

401
Authorization failed 授權失敗;即是錯誤 password
403
Access denied 存取違規;即是你不可以讀取這個檔案
404
File not found 找不到檔案
500
Internal Server Error 伺服器內部錯誤;可能是 http 伺服器本身是問題,也可能是 CGI 出錯

也有以下兩類做法

ErrorDocument 404 "<html><body>找不到</body></html>"
ErrorDocument 500 http://www.xxx.com/xxx

Ps. 如果所用的錯誤文件是一個 CGI 檔,就會有一點關於那個錯誤的資科放到環境變數內給 CGI 讀取。


【自設首頁檔案 】

這個可以算是最簡單的一個設定了

DirectoryIndex index.html index.htm index.cgi

很簡單,常你的網址是一個目錄,沒有注明檔名時 (如: http://www.xxx.com/) 它會顯示 index.html。 如果沒有這個檔案,就找下一個檔案。如果沒有任可一個名單上的檔案,就會依設定列出目錄內的檔名。


【禁止讀取檔案 】

如果你的 CGI 會把秘密的內容(如: 密碼)存到一個檔案,那麼別人只要知道這個檔案的位置,就可以很簡單的看到一切。不想這樣嗎?你可以完全不改變其他設定,不用把那個檔案移到其他地方,只需在 .htaccess 加幾句就可以。

<Files filename.ext>
order allow,deny
deny from all
</Files>

而 Apache 1.3 以後的版本,我們更可以用支援 regular expression 的 filesmatch

<filesmatch ".tmp">
order allow,deny
deny from all
</filesmatch>

其實 files 也可用 regular expression 的,但要加一個 ~ 在前(例: <files ~ ".xxx$">)。 files 和 filesmatch 的意思就是,內裏被包著的幾句只會對付合要求的部份檔案生效。
接著我就說有關中間的文字→order deny, allow,就是先找出禁止(deny) 的,才去找例外許可的 (allow)。 如果把它們反轉,就是 order allow, deny 就是,就是先找出許可(allow) 的,才去找禁止的 (deny)。 之後的 deny form all 就是說,全部 IP 來的都不可以。 相對地 allow form all 也就是全部都可以。 而你更可以這樣做

order allow,deny
allow form all
deny form 123.456     所有以 123.456 開始的 IP,如 123.456.1.1

除了設定 IP 外,您也可以設定 hostname(如: xxx.com)

Files 和 Filesmatch 的用途很多,你不但可以設定 deny,更可以設定 個別檔案的密碼,如

<files abc>
require user abc
</files>
<files def>
require user def
</files>


【重新導向文件 】

就是重新導向文件。

Redirect /abc http://www.xxx.com/abcabc
Redirect permanent /def http://www.xxx.com/def

即是說,如果 browser 要求 http://_____/abc 它就會重新導向至 http://www.xxx.com/abcabc。 而第二句又有甚麼不同呢?答案就是 http 的狀能碼不同,parmanet (301) 是永遠的,代表 browser 下一次未必會再要求這檔案,而直接找另一個。除了 permanent 之外,還有 temp ( 301;和不寫一樣)、seeother(303) 和 gone(410)。
也有 RedirectMatch,不過它就支援 regular expression。


【防止列出目綠內的檔案 】

其實要做到這個目標可以不用 .htaccess,你只要自己寫一頁 index.html 放入去就可以了。但是,用 .htaccess 會方便很多,在 .htaccess 中加一句。

Options -Indexes

這樣做,伺服器就不會多事地把目錄內的檔名列出。如果你只不過是想不列出某幾個檔案,請用以下的設定

IndexIgnore *.gif *.jpg

我想就算只識一點英文的人也會明白,就是在列出檔名時不理會(ignore) 後面的檔案。

Ps. 如果設定了 IndexIgnore *,它就不會列出任何檔案,但是會有 HEADER 和 README 的內容,而它們是可以自設的。

 

posted by admin in Linux and have No Comments