靜態 偽靜態 優先順序
有何好的方案解決靜態、偽靜態優先順序問題?
系統: Linux Apache PHP/5.2.17
現在伺服器上用.htaccess重寫地址做偽靜態,用了緩衝。但是還是經常超出空間商的cpu limit,最近已經兩次被空間商強制停機了。
現在想把大部分的頁面改成純靜態,只有分頁還保留偽靜態。
現在希望能夠在“純靜態html”頁面存在的情況下直接連結到“純靜態html”頁面,“純靜態html”頁面不存在的情況下就用偽靜態。
但是,我們知道在有偽靜態規則的規範下是無法訪問到“純靜態”頁面的,始終會被連結到相應的php頁執行。
查詢 百度,看到有說用不同尾碼來區分純靜態和偽靜態,如:.htm .html
這樣是可以達到目的,但是要修改很多模板裡的.html,很麻煩,在這裡想請問大神們有沒有更好的解決方案。
望大神們不吝賜教啊!
拜謝了!
回複討論(解決方案)
在用.htm .html不同副檔名 來解決 優先順序問題,會帶來另外一個問題,那就 狀態代碼302問題
302對搜尋引擎不友好,會引起搜尋引擎的誤會(有URL正常化及網址劫持的問題,可能被搜尋引擎判為可疑轉向,甚至認為是作弊【摘自xxx部落格】)
.htm 做偽靜態,當使用者點擊 xxx/xx.htm 進來後 相應的 xx.php會執行, 先判斷xx.html是否存在且沒有到期,如果不是則讀取資料和模板產生相應的xx.html頁,如果是則直接location到xx.html。 就是這個location轉向,產生了302錯誤,所以......
所以問大神們 , 有沒有好的解決方案?
.htaccess重寫地址應該可以解決。如果沒找到就下一條規則。實在不行,對404寫一下規則。
不管怎麼樣,你要做判斷是否存在靜態頁面,就一定要用到PHP程式。總之,apache不管這個事。
if(!file_exists('xxx/xx.htm')||(time()-filemtime('xxx/xx.htm'))>3600)){
//代碼產生Bot,儲存為xxx/xx.htm
}else{
//file_get_contents(xxx/xx.htm);
}
還是多從源碼下功夫吧,減少include,require,合理運用unset();合并相同的代碼為function()調用,等等。
此外,可以考慮換空間。
1、如果沒有尾碼,顯然就不是真靜態。再麻煩也是需要修改的
更何況,偽靜態頁面的 url 應該是由函數產生的,如果你不是這樣做的,那麼就應該堅決改正過來
2、常見的重寫規則中都有
RewriteCond %{REQUEST_FILENAME} !-f
如果檔案存在,就直接存取檔案,不進行下面的RewriteRule。
3、如果真實存在的 .htm 都還要經 php 處理的話,那我就不知道你的“靜態”是指什麼了
感謝 徐老師
一直不知道
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
的作用
現在總算知道了
謝謝! 結貼!