SEO搜索引擎優化,我平時經常花去8個小時以上的時間在寫代碼,在最近的一個項目中,客戶明確要求要對SEO初級作掉,對於有站內用戶的的問題(.NET的MemberShip我本來就有些抵觸,認為只是畫蛇添足,對於我,還是會寫幾行代碼的,那些本本功能我還是比較容易寫出的).把用戶的功能寫完了以後,我把Begin_Request處理了一下,輸出了一個模板頭,定義了一寫變量,主要是Meta屬性.
原計劃在Global中配置,後來想到了Webs,恐怕不太好,就把這個功能都算在用戶信任頭除了.說其中的一個例子:
某個文件:http://www.baidu.com/my/list_1.html這個文件其實是調用了list.aspx?id=1,然後輸出標題,關鍵字等.如果用else,if判斷,就太得不償失了.我就自定義了一個配置模板,格式如下:
<?xml version="1.0" encoding="GB2312"?>
<Configs>
<Config style="default">
<BaseUrl>http://s:81/shoeer/</BaseUrl>
<PingRule>
<Path>index.aspx</Path>
<FormatType>None</FormatType>
<Title>Blog--Manage</Title>
<Description><![CDATA[描述部分]]></Description>
<Keywords><![CDATA[關鍵詞]]></Keywords>
</PingRule>
</Configs>
其中的Config/@style主要是加載的模板,後台設置,用xpath,//BaseUrl就是傳輸的主URL,在//PingRule(就是每個文件的匹配項下面):
其中的Path就是當前的路徑減去BaseUrl余下的.
FormatType是查詢的方式,後台當作Enum格式處理:
None 是靜態類型
DB 是數據庫
strings 字符串
Query是執行的語句.
Get 是需要Get的字段.
余下的就是需要替換的模板變量了
例如:
<Path>resumes.aspx</Path>
<FormatType>strings</FormatType>
<Query>all=鞋業應聘;student=在校學生;designer=設計師</Query>
<Get>type</Get>
<Title>{0}-個人簡歷</Title>
這個根據get的type變量,如果type是all,title就是鞋業應聘-個人簡歷.
<Path>citys.aspx</Path>
<FormatType>DB</FormatType>
<Query>select top 1 [name] from [s_classplace] where [id]={0}</Query>
<Get>id</Get>
<Title>{0}-鞋業招聘信息</Title>
這個,根據id,輸出數據庫的信息,Query是一條sql語句,其中可以吧sql語句執行結果的每列用-風格,連起來.組成:
高級人才-鞋業招聘信息
等等.
以上技術,在PHP,ASP,ASP.NET,JSP等可以廣泛使用.
MS開源的那個Url重寫的有bug:
當系統變得不穩定的時候,cache容易丟失,而BaseModuleRewriter_AuthorizeRequest依賴的匹配正則來自cache,在BaseModuleRewriter_AuthorizeRequest的時候,沒有結果null判斷,所以會導致空引用.
在15行可以加上try或者null判斷,或者重建cache.
.net的cache保存在進程裡面很容易蒸發.注意些.