標籤:filter cms 即時 document 完整 列表 安全 重複 ack
偽靜態
偽靜態
偽靜態頁面,其目的是為了更好的被搜尋引擎收錄而通過一定的規則,把動態網頁面的地址轉換成以htm或html結尾的地址,看起來是靜態,實際是依然是動態網頁面。
但是現在很多CMS網站程式,都可以把動態網頁面直接產生真靜態的,就是所訪問的頁面是真真實實存的,根靜態頁面一樣。這樣的好處是訪問速度快,不需要頻繁去讀取篩選伺服器裡的資料,減輕了伺服器的壓力,同時也能更好地被搜尋引擎收錄。
主要不足
1、當然猶如一篇文章的作者所說的:"如果流量稍大一些使用偽靜態就出現CUP使 用超負荷,我的同時線上300多人就掛了,而不使用偽靜態時候同時線上超500人都不掛,我的IIS(互連網資訊服務)數是1000。”確實是這樣的,由於偽靜態是用正則 判斷而不是真真實位址,分別顯示哪個頁面的責任也由直接指定轉由CPU來判斷了,所以CPU佔有量的上升,確實是偽靜態最大的弊病。
2、網站承受力低。
另外,會造成網站可承受同時線上人數劇減。如果你的網站可以保證1000人同時訪問的話,那麼做了偽靜態處理之後,300人訪問就足以讓你網站掛掉。
3、網頁開啟慢。
偽靜態頁面開啟速度快,簡直太搞笑了,偽靜態仍然要讀取資料庫,還額外的多了一個.重寫網址.的過程,其他的步驟絕對不會比動態少,怎麼會快呢?
4、大量的重複頁面。
做了偽靜態後,原有的頁面也可以訪問,這就造成了大量的偽靜態頁面和動態網頁面重複,對網站極為不好。
5、需要伺服器的支援。
並不是所有的伺服器都支援偽靜態,這無形中又增加了成本。
所以,如果網址中的動態參數沒有達到想想搜尋引擎收錄的程度,動態要比偽靜態好的多。
6、造成真正的靜態網頁無法訪問。
如果php偽靜態成html,那麼真正的靜態頁就無法訪問了。(可通過修改伺服器配置解決,可是你又何必去費這把力氣呢?)
方法步驟
找到apache的設定檔httpd.conf(檔案在conf目錄下),先必須得讓伺服器支援mod_rewrite。
mod_rewrite:
此模組提供了一個基於Regex
分 析器的重寫引擎來即時重寫URL請求。它支援每個完整規則可以擁有不限數量的子規則以及附加條件規則的靈活而且強大的URL操作機制。此URL操作可以依 賴於各種測試,比如伺服器變數、環境變數、HTTP頭、時間標記,甚至各種格式的用於匹配URL組成部分的尋找資料庫。
此模組可以操作URL的所有部分(包括路徑資訊部分),在伺服器級的(httpd.conf)和目錄級的(.htaccess)配置都有效,還可以產生最終請求字串。此重寫操作的結果可以是內部子處理,也可以是外部請求的轉向,甚至還可以是內部代理處理。
一般mod_rewrite預設是不啟動的,這時我們需要手動啟用它。
找到AllowOverride None 改成 AllowOverride All,
AllowOverride:
常利用Apache的rewrite模組對 URL 進行重寫的時候, rewrite規則會寫在 .htaccess 檔案裡。但要使 apache 能夠正常的讀取.htaccess 檔案的內容,就必須對.htaccess 所在目錄進行配置。從安全性考慮,根目錄的AllowOverride屬性一般都配置成不允許任何Override ,即
< Directory />AllowOverride None< /Directory>
在 AllowOverride 設定為 None 時, .htaccess 檔案將被完全忽略。當此指令設定為 All 時,所有具有 ".htaccess" 範圍的指令都允許出現在 .htaccess 檔案中。
而對於 URL rewrite 來說,至少需要把目錄設定為
< Directory /myblogroot/>AllowOverride FileInfo< /Directory>
AllowOverride的參數
:
AuthConfig 允許使用與認證授權相關的指令(AuthDBMGroupFile, AuthDBMUserFile, AuthGroupFile, AuthName, AuthType, AuthUserFile, Require, 等)。FileInfo 允許使用控制文件類型的指令(DefaultType, ErrorDocument, ForceType, LanguagePriority, SetHandler, SetInputFilter, SetOutputFilter, mod_mime中的 Add* 和 Remove* 指令等等)、控制文檔中繼資料的指令(Header, RequestHeader, SetEnvIf, SetEnvIfNoCase, BrowserMatch, CookieExpires, CookieDomain, CookieStyle, CookieTracking, CookieName)、mod_rewrite中的指令(RewriteEngine, RewriteOptions, RewriteBase, RewriteCond, RewriteRule)和mod_actions中的Action指令。Indexes 允許使用控制目錄索引的指令(AddDescription, AddIcon, AddIconByEncoding, AddIconByType, DefaultIcon, DirectoryIndex, FancyIndexing, HeaderName, IndexIgnore, IndexOptions, ReadmeName, 等)。Limit 允許使用控制主機訪問的指令(Allow, Deny, Order)。Options[=Option,...] 允許使用控制指定目錄功能的指令(Options和XBitHack)。可以在等號後面附加一個逗號分隔的(無空格的)Options選項列表,用來控制允許Options指令使用哪些選項。
注:AllowOverride 的參數設定為ALL,表示整台伺服器上都支援URL規則重寫。Apache 伺服器要讀每個網站下目錄下的 .htaccess 檔案。如果沒有這個檔案,或者這個文檔沒有定義任何關於URL重寫的規則就不會有任何效果。 對於不同的網址,需要在APACHE中增加如下內容 Options FollowSymLinks AllowOverride None
在.htaccess中有兩種寫法 第一種比較全 但是常用的是第二種
第一種:
Options +FollowSymLinks
IndexIgnore **
RewriteEngine on
# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# otherwise forward it to index.php
RewriteRule . Index.php 【L】
mod_rewrite
要求有followsymlinks,否則會顯示500內部伺服器錯誤。IndexIgnore讓指定file排除在顯示列表之外,也就是忽略顯示,也就是不顯示,file可以是檔案全名,或是shell樣式的萬用字元。RewriteCond %{REQUEST_FILENAME} !-f,這句話的意思是:如果檔案存在,就直接存取檔案,不進行下面的RewriteRule.%{REQUEST_FILENAME} 請求的檔案名稱!-f 不是檔案或不存在!-d 不是目錄或不存在[L] 這是最後一個匹配項,不再往下匹配
RewriteCond還有別的 比如!-s 是否是長度不為0的regular的檔案
-i 是否為symbolice link
-u 用subrequest檢查某個URL是否存在
等等
YII中偽靜態使用
Common->config->main.php
首先,在設定檔config/main.php的‘components‘ 段中,加入如下設定:‘urlManager‘=>array( ‘enablePrettyUrl‘ => true, //對url進行美化 ‘showScriptName‘ => false,//隱藏index.php ‘suffix‘ => ‘.html‘,//尾碼 ‘enableStrictParsing‘=>FALSE,//不要求網址嚴格匹配,則不需要輸入rules ‘rules‘ => []//網址匹配規則
)
rules執行個體
‘sitemap\.xml‘ => ‘site/sitemap‘, //網站地圖
‘sitemap\.xsl‘ => ‘site/sitemapxsl‘, //網站索引
‘page/‘=>‘page/index‘, //單頁
‘//cat_/page_‘=>‘/‘, //分頁
‘//page_‘=>‘/‘, //分頁
‘//cat_‘ => ‘/‘, //內容列表
‘tag/index/‘ => ‘tag/index‘, //標籤搜尋網頁
‘/‘=>‘/view‘,
‘//‘=>‘/‘,
‘/‘=>‘/‘,
html靜態頁面