httpd.ini

httpd.ini

httpd.ini是windows主機伺服器上IIS的配置檔案。

簡介,功能,域名定向,域名綁定,修改狀態,方法,用法,

簡介

windows主機器的網站以搭建在虛擬主機上,當我們用習慣了apache下的.htaccess的時候,很難想像windows主機上怎么實現它的強大功能。實際上windows主機伺服器上的虛擬主機可以用httpd.ini檔案來充當.htaccess檔案在Linux主機空間的作用,不過要令你失望的是,httpd.ini的功能完全沒有.htaccess那么強大,規則上沒有那么豐富,細節上也有很大的不同。
要在你的空間使用httpd.ini首先得確定你的空間是否支持該功能,可以詢問服務商,如果是企業用戶,可以要求服務商為你。

功能

我們來看一段簡單的httpd.ini內容實現的功能,從這段代碼開始:
[ISAPI_Rewrite]
RewriteRule /(.*).html /index.php?p=$1 [L]
上面這段小代碼不難讓你想像它的功能,即先開啟重寫功能,然後執行一條規則,將根目錄下後綴為.html的網址內容和/index.php?p=後面的內容匹配。你可以用這個網址來訪問這個真實的地址。關於httpd.ini的部分規則,將會在下面的案例中一一講到。

域名定向

[ISAPI_Rewrite]
RewriteCond Host: ^$
RewriteRule (.*) [R,I,L]
上面這段代碼實現了將重定向到。這種方法據說是有利有SEO的。
[ISAPI_Rewrite]是開啟重寫能力的意思,每個單詞都對應了英文的原意。
RewriteCond提出條件,相當於IF。Host後面跟上域名,即條件內容,域名為情況下,執行下面的規則。^是開始標記,即域名以開始,$為結尾標記,即域名以結尾。整條語句的意思“重寫條件 域名以u開頭到com結束的情況下,往下執行”言外之意不符合則不執行。“”是轉義字元,在httpd.ini中需要對這種index.php中間的點加以轉義。
RewriteRule則是指執行的規則。(.*)即第一個要匹配的內容,也就是說你的用這個東西將要代替另外一樣。“.”指任意字元,“*”指這個字元重複0或更多次,如果是“+”意思為重複1或更多次。那么“(.*)”的意思就是指任意字元而且該字元可以隨意重複N次,其實就是任意內容了。後面則是將前面的(.*)代替什麼了,用$1表示。也就是說如果我輸入的是不帶WWW的那么實際上伺服器將用帶WWW的這個網址。這樣就實現了域名的重定向。再舉一例,如果規則為RewriteRule /(.*).html [R,I,L]那么只會當你用訪問時跳轉為靜態路徑。實際上這種方法我們只用在域名跳轉上,不用在單獨網頁跳轉上,從而實現301重定向。

域名綁定

[ISAPI_Rewrite]
RewriteCond Host: ^$
RewriteRule ^(.*)$ /$1 [I]
RewriteCond Host: ^www.
RewriteRule //(.*)$ R,I]
如果按照上面一段的分析,我想你應該能慢慢理解這段代碼的內容:開啟重寫能力,如果訪問的域名是,無論後面跟隨什麼,都代替/這個網址後面的內容,如果訪問的網址是後面無論跟隨什麼內容,那么都將網址變為並後面用訪問網址後面的內容代替。這樣兩個循環,實現了子目錄/被綁定到上。
frustigor找到了綁定子目錄後將wordpress放在被綁定子目錄下面的wordpress的固定連結的辦法,雖然有些小缺陷,但總體上能實現這個想法。

修改狀態

[ISAPI_Rewrite]
# 3600 = 1 hour
CacheClockRate 3600
RepeatLimit 32
# Protect httpd.ini and httpd.parse.errors files
# from accessing through HTTP
# Rules to ensure that normal content gets through
RewriteRule /sitemap.xml /sitemap.xml [L]
RewriteRule /favicon.ico/favicon.ico [L]
RewriteRule /sitemap_baidu.xml /sitemap_baidu.xml [L]
RewriteRule /sitemap.html /sitemap.html [L]
RewriteRule /archivers/(.*) /archivers/$1 [L]
# For file-based wordpress content (i.e. theme), admin, etc.
RewriteRule /wp-(.*) /wp-$1 [L]
# For normal wordpress content, via index.php
RewriteRule ^/$ /index.php [L]
RewriteRule /(.*) /index.php/$1 [L]
這段代碼的規則部分中你需要注意的是前面兩句實現了你仍然可以訪問這兩個檔案,如果沒有這兩句,你的wordpress會給出“未找到文章”的提示錯誤頁面。接下來兩句是讓你可以訪問/wap/和/content/uploads/這兩個目錄的規則。如果沒有,那么無論你是訪問該目錄,還是從該目錄下載東西,都將被wordpress返回未找到頁面的提示。最後三句規則則是實現wordpress能夠像在Linux上採用樂觀的固定連結的形式的關鍵。每篇內容的網址都逃離了win主機wordpress固定連線頂層目錄被加/index.php/的厄運,直接可以成為華麗的自定義網址。

方法

採用一種根據這接收地址來跳轉的代碼,如下:
if($_GET['p']||$_GET['page_id']){
if($_GET['p'])$id=$_GET['p'];
if($_GET['page_id'])$id=$_GET['page_id'];
$post= get_post($id);
$name=$post->post_name;
header(‘HTTP/1.1 301 Moved Permanently’);//
header(‘Location: ‘.bloginfo(‘url’).’/’.$name.’/');
exit();
}else if($_GET['cat']){
$id=$_GET['cat'];
$cat=get_category($id);
$name=$cat->slug;
header(‘HTTP/1.1 301 Moved Permanently’);//
header(‘Location: ‘.bloginfo(‘url’).’/cat/’.$name.’/');
exit();
}else if($_GET['tag']){
$name=$_GET['tag'];
header(‘HTTP/1.1 301 Moved Permanently’);//
header(‘Location: ‘.bloginfo(‘url’).’/tag/’.$name.’/');
exit();
}
另外,這種方法還要讓wordpress支持中文轉碼網址,必須修改wordpress源檔案
修改網站目錄下wp-include/classes.php檔案(請先行備份):
(最新3.1版需要修改的檔案是wp-include/class-wp.php)
第一步:找到
$pathinfo= $_SERVER['PATH_INFO'];
修改為
$pathinfo= mb_convert_encoding($_SERVER['PATH_INFO'], ‘UTF-8′, ‘GBK’);
第二步:找到
$req_uri = $_SERVER['REQUEST_URI'];
修改為
$req_uri = mb_convert_encoding($_SERVER['REQUEST_URI'], ‘UTF-8′, ‘GBK’);
就這樣,中文的TAG標籤頁等都可以打開了的。

用法

zblog2.0放於二級目錄靜態化httpd.ini的設定方法
這裡的httpd.ini必須放於根目錄,而不是二級目錄下面
httpd.ini的設定代碼:
RewriteRule ^(.*?)default_([0-9]+).html $1catalog\.asp\?page=$2
RewriteRule ^(.*?)category-([0-9]+)\.html $1catalog\.asp\?cate=$2
RewriteRule ^(.*?)category-([0-9]+)_([0-9]+)\.html $1catalog\.asp\?cate=$2&page=$3
RewriteRule ^(.*?)author-([0-9]+)\.html $1catalog\.asp\?auth=$2
RewriteRule ^(.*?)author-([0-9]+)_([0-9]+)\.html $2catalog\.asp\?auth=$2&page=$3
RewriteRule ^(.*?)tags-(.*)\.html $1catalog\.asp\?tags=$2
RewriteRule ^(.*?)tags-(.*)_([0-9]+)\.html $1catalog\.asp\?tags=$2&page=$3
RewriteRule ^(.*?)([0-9\-]+)\.html $1catalog\.asp\?date=$2
RewriteRule ^(.*?)([0-9\-]+)_([0-9]+)\.html $2catalog\.asp\?date=$2&page=$3
直接複製,貼上到httpd.ini裡面即可。
後台需要開啟靜態化,這個設定是默認的設定,如果是自行設定的,請根據實際情況修改即可。

相關詞條

熱門詞條

聯絡我們