一般情况下,ASP实现伪静态需要服务器安装UrlRewrite组件,并编写httpd.ini规则文件。如果虚拟主机不支持UrlRewrite,则无法实现。但是如果空间商允许我们自定义404页面为ASP脚本,则可以很好的实现伪静态。
首先说说自定义404页面的方法。打开本机IIS网站,查看属性-自定义错误,找到404错误,双击修改其消息类型为URL,Url设置为网站根目录下文件的绝对路径。比如我希望自定义错误页面为网站中根目录下的404.ASP这个文件,则设置URL为 /404.asp ,注意前面的斜杠!设置完成之后,当请求的文件不存在时,IIS会调用我们指定的脚本返回输出。
一般来说,现在的空间商都允许自定义404错误页面了。有了这点保证,才有可能为ASP实现类UrlRewrite的伪静态。
asp伪静态_404伪静态_利用404.asp实现伪静态的方法
很多网站用的是虚拟主机 服务商不一定提供伪静态功能. . .
但大部分服务商都提供404错误转向.
利用404错误 可以实现 伪静态功能.
下面说下原理
比如网站首页 http://www.378Q.com.cn/index.asp
上面的信息 地址都为 http://www.378Q.com.cn/Class/Show.asp?ID=27870
写程序时候只要故意把 http://www.378Q.com.cn/Class/Show.asp?ID=27870 写成
http://www.378Q.com.cn/show/27870.html
其实并不存在 http://www.378Q.com.cn/show/27870.html这个页面. 用户要点击这个超连接的话, 就会自
动调用404错误页面
只要报404错误页面定义为asp页面就可以了.
其中加入获得 Show.asp?ID=27870 页面的Id 27870 然后利用小偷程序 获取改页面的内容
显示在 http://www.378Q.com.cn/show/27870.html 页面上.
其中最加了 截取 带有/show/和.html的页面 如果不少就转倒正常的err.html错误页面
测试地址 http://www.378Q.com.cn/show/27870.html http://www.378Q.com.cn/Class/Show.asp?ID=27870
两个页面是一样的.
下面是 404错误页面的代码
<%
Dim webUrl,start,over,reurl,Url,Html
weburl=GetUrl()
start= instr(weburl, "/show/")
over =instr(weburl,".html")
if start<>0 and over<>0 then
reurl = mid(weburl,start+6,over-7)
reurl = replace(reurl,".html=","")
else reurl=""
end if
if reurl<>"" then
url="http://www.*****.com/Class/Show.asp?ID="&reurl
else
url="http://www.*****.com/err.html"
end if
Html = getHTTPPage(Url)
Response.write Html
'常用函数
'1、输入url目标网页地址, 返回值getHTTPPage是目标网页的html代码
function getHTTPPage(url)
dim Http
set Http=server.createobject("MSXML2.XMLHTTP")
Http.open "GET",url,false
Http.send()
if Http.readystate<>4 then
exit function
end if
getHTTPPage=bytesToBSTR(Http.responseBody,"GB2312")
set http=nothing
if err.number<>0 then err.Clear
end function
'2、转换乱玛, 直接用xmlhttp调用有中文字符的网页得到的将是乱玛, 可以通过adodb.stream组件进行
转换
Function BytesToBstr(body,Cset)
dim objstream
set objstream = Server.CreateObject("adodb.stream")
objstream.Type = 1
objstream.Mode =3
objstream.Open
objstream.Write body
objstream.Position = 0
objstream.Type = 2
objstream.Charset = Cset
BytesToBstr = objstream.ReadText
objstream.Close
set objstream = nothing
End Function
Dim ScriptAddress, M_ItemUrl, M_item
Function GetUrl()
ScriptAddress = CStr(Request.ServerVariables("SCRIPT_NAME")) '取得当前地址
M_ItemUrl = ""
If (Request.QueryString <> "") Then
ScriptAddress = ScriptAddress & "?"
For Each M_item In Request.QueryString
If InStr(page,M_Item)=0 Then
M_ItemUrl = M_ItemUrl & M_Item &"="& Server.URLEncode(Request.QueryString
(""&M_Item&""))
End If
Next
end if
GetUrl = ScriptAddress & M_ItemUrl
End Function
%>
自己要编写其它应用也行,下面简单介绍下:
<%URL=Request.ServerVariables("QUERY_STRING")%>
<%=URL%>
上面是404错误页面的代码,获取当前URL值的语句,例如:
原来动态地址:http://www.*****.com/post.asp?id=*
随便输入个地址:http://www.*****.com/post-id-*.html
页面会返回值:404;http://www.*****.com:80/post-id-*.html
我们可以利用replace把404;http://www.*****.com:80/post-id-过滤,
<% URL=replace(Request.ServerVariables("QUERY_STRING"),"404;http://www.*****.com:80/post-id-","") %>
URL值就只剩下*.html了,再利用split把它拆开,以.为主,
<% sURL=split(URL,".") %>
那最后就是,sURL(0)等于获取*的值,sURL(1)等于获取html的值,
我们把原先post.asp文件代码把获取id值改为sURL(0),然后把代码保存在404错误页面,这就实现网站伪静态功能了