什么是伪静态?

一、什么是静态技术?

所谓静态的意思,就是地址中不带问号。

二、为什么要用伪静态技术?

Web应用程序最大的特点之一就是无状态,当一个页面跳转到另一个页面时,那么这个页面上的所有参数

都将抛弃,所以动态页面一般利用url地址来保存其参数,就像:

www.hcjxzsj.com/news.asp?id=1
这样,搜索引擎在录取该页面时,可能会因为问号而进入死循环(以前动网就有这样一个漏洞,蜘蛛进去

出不来了),所以很多时候带问号的地址是不会进去的,这样便降低了页面的收录效率。

既然这样,那么选用不带问号的url不是可以更好的让搜索引擎收录自己的网页?的确。静态网页的url正好

不带问号,所以我们要伪造静态,目的就是为了SEO,提高网站的收录效率。

三、实现静态的三种方法

1、 重写url参数

参数过多,也不利于搜索引擎收录,故可以通过修改参数实现静态。

先看动态的url地址,当我们点击它时,页面跳转到essay.asp页面的同时,还传递给页面一个参数id=1,然

后我们取得了id的值,再由"select * from article where id="& ID 找到对应的记录。由此可知,整个过程的

关键是取得参数的值,所以,也可以在静态的url包含该参数的值。

又要包含参数的值,又要考虑静态,于是得出一个解决方案,即要实现这样的转换:

www.oursn.com/essay.asp?id=1

www.oursn.com/essay.asp?/1.html

比较两个url的格式,我们仅仅改变动态地址的参数,这种方式叫作重写url参数法。

不过它也存在表面和内在的缺陷。例如,它仍然存在.asp的记号,更重要的是它并没有去掉问号。

2、 ISAPI_Rewrite程序

ISAPI_Rewrite是一个强大的基于正则表达式的url处理引擎。它是专为IIS设计的。ISAPI_Rewrite有两个版

本:ISAPI_Rewrite Full与ISAPI_Rewrite Lite。ISAPI_Rewrite Lite是免费版本,但不支持反向代理功能。

ISAPI_Rewrite Full只能下载到30天的试用版本。

用ISAPI_Rewrite实现asp的静态化,将动态网页链接rewriting成静态链接是最保险和稳定的面向搜索引擎

优化方式。但这种方式不支持虚拟站点。而且对于虚拟主机的站长不太实用或太麻烦。

3、 XMLHttp组件

当我们做好一个asp程序后,如果某个页面长期不做修改,那么我们是不是可以考虑将它生成静态页呢。就

好象有一个leave.asp页面,若这个页面长期不做修改,那么我们可以利用某种方法将它生成一个leave.htm

页面,这种方法就是用XMLHttp组件。

四、伪静态原理

1、 重写url参数

其基本原理和动态url一致,都是截取参数值,只不过url的写法不同罢了。

前台的核心代码:

var id=parseInt(sParam.replace("/","").replace(".html",""));
后台的核心代码:

var sParam=String(Request.ServerVariables("QUERY_STRING"));

var id=parseInt(sParam.replace("/","").replace(".html",""));

2、 ISAPI_Rewrite程序

通过正则表达式重写url地址实现静态,正则表达式在httpd.ini中编辑。其格式为:

RewriteRule /test-([0-9,a-z]*).html /test.asp/?id=$1
RewriteRule是关键词,必须有的,没为什么。

/test-([0-9,a-z]*).html /:两跟正斜杠里编辑想要的静态地址的正则表达式。

test.asp/?id=$1:动态url的原型

这种方式仍然是在通过修改参数的位置实现静态,但和上面提到的修改参数位置不同的是:它的url中不包

含.asp等动态url的特征,而且也没有问号。

3、 XMLHttp组件

用XMLHttp组件实现的静态是真正的静态,因为它生成了真正的html文件,当页面跳转时,首先访问的是

html文件,再访问的是asp文件。

用户点击链接时,首先发送异步请求,返回请求页面的所有内容,包括文本和二进制。然后把这些内容输入

到Stream对象里进行保存,从而生成与动态页面同名的html文件,这样就实现了静态。

五、方法学

最重要,也是最激动人心的时候来了。现在,我将一步一步地拨开这三种方式的神秘面纱,并且实现相应的功能代码……

1、 重写url参数

Step1: 建立前台文件index.asp,修改url参数形式。由于读取数据库中的记录不是专题的重点,故直接给出:

<!--#include file="config.asp" -->

<%

var rs=Server.CreateObject("adodb.recordset");

sql="select * from Article";

rs.open(sql,conn,1,1)

while(!rs.EOF)

{

%>

<div><%=rs("title")%></div>

<%

rs.MoveNext();

}

rs.Close();

rs=null;

%>

Step2:为了达到伪静态的目的,就必须在前台页面加上伪静态的代码。接下来就要修改url的参数形式:

在<%=rs("title")%>两边插入<a href="article.asp?/<%=rs("id")%>.html">和</a>,即<a href="article.asp?/<%=rs("id")%>.html"><%=rs("title")%>& lt;/a>。

1、Article.asp?/<%=rs("id")%>.html:这句代码实现了伪静态,当点击该链接后,地址显示的就是href的值。

2、至此前台脚本就写完了,最关键的一句就是article.asp?/<%=rs("id")%>.html。接下来写后台的处理数据。
index.asp:

<!--#include file="config.asp" -->

<%

var rs=Server.CreateObject("adodb.recordset");

sql="select * from Article";

rs.open(sql,conn,1,1)

while(!rs.EOF)

{

%>

<div><a href="article.asp?/<%=rs("id")%>.html"><%=rs("title")%></a></div>

<%

rs.MoveNext();

}

rs.Close();

rs=null;

%>

Step3:新建一个后台文件Article.asp,保存核心代码。由于连接数据库不是本专题的重点,故直接给出:

<!--#include file="config.asp" --> /*连接数据库的代码*/
<%

ReadNews(id); ‘从数据库中读出记录

%>

<div>

标题: <b><%=News_title%></b><br /> /*显示记录*/

内容: <%=News_content%>

</div>

Step4:由于传递进的url包含参数,故首先截取参数:

var sParam=String(Request.ServerVariables("QUERY_STRING"));

1、ServerVariables是asp的环境变量,UERY_STRING保存了动态url的参数。例如,如果url是www.oursn.com/essay.asp?/1.html,那么sParam保存的值就是问号以后的字符串,即sParam= /1.html。

2、String()是将参数强制性转化为字符串,这里Request .ServerVariables返回的是一个对象object,而不是字符出串,故需要转化。

Article.asp:

<!--#include file="config.asp" --> /*连接数据库的代码*/

<%

var sParam=String(Request.ServerVariables("QUERY_STRING"));

ReadNews(id); ‘从数据库中读出记录

%>

<div>

标题: <b><%=News_title%></b><br /> /*显示记录*/

内容: <%=News_content%>

</div>

Step5:截取参数字符串后,进一步获取id的值,这里是数字1,可以通过字符串方法replace()来实现:

var id=parseInt(sParam.replace("/","").replace(".html",""));

1、sParam.replace("/","")是用空格代替了sParam中的斜杠,即1.html。

2、sParam.replace("/","").replace(".html","")是用空格代替了1.html的. Html,即1,但这时的1还是字符串,再通过parseInt()强制转化为整型,最后赋给id。则id中保存是值型的1。

Article.asp:

<!--#include file="config.asp" --> /*连接数据库的代码*/

<%

var sParam=String(Request.ServerVariables("QUERY_STRING"));

var id=parseInt(sParam.replace("/","").replace(".html",""));

ReadNews(id); ‘从数据库中读出记录

%>

<div>

标题: <b><%=News_title%></b><br /> /*显示记录*/

内容: <%=News_content%>

</div>

config.asp中的代码:

<%@LANGUAGE="JAVASCRIPT" CODEPAGE="936"%>

<%

var db="data.mdb";

var conn = Server.CreateObject("ADODB.Connection")

var connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Server.MapPath(db);

conn.open(connstr);

var News_title,News_content;

function ReadNews(id)

{

var rs1=Server.createobject("adodb.recordset")

sql1="select id,title,content from article where id="+id;

rs1.open(sql1,conn,3,3);

News_title=String(rs1("title"));

News_content=String(rs1("content"));

rs1.Close();

rs1=null;

}

%>

2、 ISAPI_Rewrite程序

Step1: 下载ISAPI_Rewrite,下载地址:http://www.helicontech.com/download/。

PS:ISAPI_Rewrite分精简(Lite)和完全(Full)版. 精简版不支持对每个虚拟主机站点进行重写,只能进行全局处理。

Step2: 安装.msi的文件。

Step3: 打开Internet 信息服务,右键web站点属性,ISAPI筛选器选项卡.添加筛选器,名称自己填,路径自己指定ISAPI_Rewrite.dll,然后确定。

1、web站点不是虚拟目录,而是与默认网站相同树根的站点,这一点要小心。

2、ISAPI_Rewrite安装好后,不要修改它的默认。

Step4:添加rewrite规则。找到ISAPI_Rewrite目录,把httpd.ini的只读属性去掉,打开编辑.我们要把essay.asp?id=1映射成为essay-1.html这样的类型,需要在httpd.ini里加上这么一行:
RewriteRule /essay-([0-9,a-z]*).html /essay.asp/?id=$1

Step5:来测试一下:

1、test.asp,里面写上

<%=request.querystring("inso")%>
2、在httpd.ini里加上这么一行:
RewriteRule /test-([0-9,a-z]*).html /test.asp/?inso=$1
3、保存.
4、到浏览器里查看一下效果吧.输入http://127.0.0.1/test.asp?inso=im286和http://127.0.0.1/test-im286.html,显示的内容都是im286。

3、 XMLHttp组件


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="
http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>静态</title>


</head>
<body ><%
'----------------------------------------------------------
'使用XMLHTTP生成静态首页的代码
'Curl 为你的首页地址,确保你的空间支持FSO
'-----------------------------------------------------------
dim read,Curl,content
Curl="http://www.hcjxzsj.com/danpin.asp?bjxGid=5210"
read=getHTTPPage(Curl)
if read<>"" then
content=read
call makeindex()
end if
sub makeindex()
Set Fso = Server.CreateObject("Scripting.FileSystemObject")
Filen=Server.MapPath("qiumoji.html")
Set Site_Config=FSO.CreateTextFile(Filen,true, False)
Site_Config.Write content
Site_Config.Close
Set Fso = Nothing
Response.Write("<script>alert('已经成功生成首页!')</script>")
end sub
Function getHTTPPage(url)
dim http
set http=Server.createobject("Microsoft.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
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
%>
</body>
</html>

### 伪静态配置的含义及解决 PHP 页面无法使用问题的方法 #### 1. 伪静态配置的含义 伪静态是一种通过 URL 重写技术将动态生成的 URL 转换成具有静态形式的技术。它能够提升网站的用户体验和搜索引擎优化 (SEO) 效果。例如,可以将形如 `index.php?id=123` 的动态 URL 转换为更加简洁友好的形式,比如 `article/123.html`[^3]。 在实际应用中,伪静态通常由 Web 服务器(如 Apache 和 Nginx)配合后端脚本(如 PHP)共同完成。Web 服务器负责解析请求并将匹配的规则传递给后端程序执行。 --- #### 2. 解决 PHP 页面无法使用的问题 ##### (1)检查服务器环境是否支持伪静态 确保所使用的 Web 服务器已启用必要的模块来支持 URL 重写功能: - **对于 Apache**:需要加载 `mod_rewrite` 模块,并允许 `.htaccess` 文件生效。 - **对于 Nginx**:需正确配置 `rewrite` 规则以实现 URL 重定向逻辑。 如果没有正确安装或启动这些组件,则可能导致 PHP 页面因缺少相应指令而失效[^4]。 ##### (2)验证 .htaccess 配置文件的有效性(针对 Apache) 如果正在运行基于 Apache 架构的服务,默认情况下会依赖于项目根目录下的 `.htaccess` 文档来进行局部性的路由定制。一个典型的例子如下所示: ```apache <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / # 将所有未指向真实资源的访问转发至 index.php 处理 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)\.html$ /index.php?path=$1 [L,QSA] </IfModule> ``` 上述代码实现了将以 `.html` 结尾的路径映射回内部调用带有查询字符串参数的实际入口点——即这里的 `/index.php`[^1]。然而,假如此段落存在语法错误或者被意外覆盖等情况都会引发页面空白等问题;因此建议定期审查此类核心配置文档的状态及其权限设置。 ##### (3)排查 PHP 应用本身是否存在缺陷 即使外部条件均已满足,仍有可能由于应用程序自身的编码失误而导致预期行为未能正常展现出来。此时可以从以下几个方面入手分析原因所在: - 确认数据库连接无误; - 审核控制器层面对传入变量的接收与分配机制是否有遗漏之处; - 测试视图渲染部分能否独立呈现数据等内容[^2]。 --- #### 3. 实现示例 以下是一个完整的案例演示如何利用 PHP 及其框架构建具备良好结构化的伪静态网址体系的过程: 假设我们有一个简单的博客系统,每篇文章都有唯一的 ID 值作为标识符。为了改善链接外观质量,我们可以按照前述方式定义一套新的展示模式: 原始地址:`http://example.com/index.php?action=view&id=789` 期望效果:`http://example.com/article/789.html` 对应地,在后台处理逻辑里增加一段类似的判断分支即可适应不同的输入情形: ```php <?php // 获取经过重写的虚拟路径成分 if(isset($_GET['path'])){ $segments=explode("/",$_GET['path']); switch($segments[0]){ case 'article': include('view_article.php'); exit; default: header("HTTP/1.0 404 Not Found"); echo "Page not found."; break; } } ?> ``` 与此同时也要同步更新前端 HTML 输出中的超链跳转目标使之符合最新的约定标准。 --- ### 总结 综上所述,要成功部署并维护好一套健全可用的伪静态解决方案除了需要掌握基本原理之外还需要密切留意各个环节之间的相互作用关系一旦发现问题就要迅速定位根源采取针对性措施加以修正直至恢复正常运作为止。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值