- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章基于php伪静态的实现方法解析由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
一直在做php的开发工作.在开发的过程中老早就听说了“伪静态”这一说。但是一直没有对其进行了解.
今天终于下定决定 要好好的了解下这方面的内容.
首先,什么是伪静态:
伪静态又名URL重写,是动态的网址看起来像静态的网址。换句话说就是,动态网页通过重写URL方法实现去掉动态网页的参数,但在实际的网页目录中并没有必要实现存在重写的页面.
另外在补充两个名词解析 。
静态网址:纯静态HTML文档,能使用filetype:htm 查询到的网页 。
动态网址:内容存于数据库中,根据要求显示内容,URL中以 ? # & 显示不同的参数,如:news.php?lang=cn&class=1&id=2 。
动态、静态、伪静态之间的利与弊(新) 。
动态网址 。
首先,动态网址目前对于Google来说,“不能被抓取”的说法是错误的,Google能够很好的处理动态网址并顺利抓取;其次“参数不能超过3个”的说法也不正确,Google能够抓取参数超过3个的动态网址,不过,为了避免URL太长应尽量减少参数.
其次,动态网址有其一定的优势,以上面所说的 news.php?lang=cn&class=1&id=2 为例,网址中的参数准确的告诉Google,此URL内容语言为cn、隶属于分类1、内容ID为2,更便于Google对内容的识别处理.
最后,动态网址应尽量精简,特别是会话标识(sid)和查询(query)参数,容易造成大量相同页面.
静态网址 。
首先,静态网址具有的绝对优势是其明晰,/product/nokia/n95.html和/about.html可以很容易被理解,从而在搜索结果中可能点击量相对较高.
其次,静态网址未必就是最好的网址形式,上述动态网址中说到,动态网址能够告诉Google一些可以识别的参数,而静态网址如果文档布置不够恰当(如:过于扁平化,将HTML文档全放在根目录下)及其他因素,反而不如静态网址为Google提供的参考信息丰富.
最后,樂思蜀觉得Google此文中是否有其隐藏含义?“更新此种类型网址的页面会比较耗费时间,尤其是当信息量增长很快时,因为每一个单独的页面都必须更改编译代码。”虽然所说的是网站,但在Google系统中是否同样存在这样的问题呢?
伪静态网址 。
首先,伪静态网址不能让动态网址“静态化”,伪静态仅仅是对动态网址的一个重写,Google不会认为伪静态就是HTML文档.
其次,伪静态可取,但应把重心放在去除冗余参数、规范URL、尽可能的避免重复页上.
最后,伪静态有很大潜大危险,最好在对网站系统、网站结构、内容分布、参数意义熟悉的情况下使用.
在写伪静态规则时,应保留有价值的参数,不要将有价值的参数全部精简掉,如前面例子中的 news.php?lang=cn&class=1&id=2 最好重写为 news-cn-class1-id2.html,而不是过份精简重写为 news-2.html.
再就是伪静态中一定不能包含会话标识(sid)和查询(query)参数,/product.asp?sid=98971298178906&id=1234 这样的动态网址,其中的sid本来Google能够识别并屏蔽,但如果重写为 /product/98971298178906/1234,Google不但无法识别,还在整站中造成无限重复页面(每个会话都会产生一个新的会话ID).
我们应该选择伪静态还是真静态 。
1、使用真静态和假静态对SEO来说没有什么区别 。
2、使用真静态可能将导致硬盘损坏并将影响论坛性能 。
3、使用伪静态将占用一定量的CPU占有率,大量使用将导致CPU超负荷 。
4、最重要的一点,我们要静态是为了SEO 。
所以:
1、使用真静态的方法可以直接排除了,因为无论怎么生成,对硬盘来说都是很伤的.
2、既然真伪静态的效果一样,我们就可以选择伪静态了.
3、但是伪静态大量使用会造成CPU超负荷.
4、所以我们只要不大量使用就可以了.
5、既然静态只是给SEO看的,我们只需要伪静态给SEO就行了,不需要给用户使用.
6、所以我们只要在专门提供给SEO爬的Archiver中使用伪静态就可以了.
7、谢谢大家耐心看我写的文章.
8、有何不解的地方或是有不同的看法欢迎提出 。
关于伪静态和真静态的评论 。
真正的静态化和伪静态还是有本质的区别的。为浏览用户处理一个纯粹html和一个调用多个数据的php在CPU的使用率方面明显前者少。记得原来有个人说html下载硬盘读写频繁,他这么说好像读取数据库不用读写磁盘似的,何况还有一大堆缓存的零散php也是放在硬盘的,这些读取不用磁盘操作么?可笑.
读取单个html+图片Flash等附件就可以实现的目的,何苦要读数据库又要读php缓存文件又要重新整合数据输出再+图片Flash等附件这么大费周章呢?CMS首页不需要很多的互动的,论坛那一套不应该拿到这里来用,相反应该更多考虑的是:美观!兼容!信息的直观!性能!还有稳定! 。
在转一个 php伪静态的实现四法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
<?php
//伪静态方法一
// localhost/php100/test.php?id|1@action|2
$Php2Html_FileUrl
=
$_SERVER
[
"REQUEST_URI"
];
echo
$Php2Html_FileUrl
.
"<br>"
;
// /php100/test.php?id|1@action|2
$Php2Html_UrlString
=
str_replace
(
"?"
,
""
,
str_replace
(
"/"
,
""
,
strrchr
(
strrchr
(
$Php2Html_FileUrl
,
"/"
),
"?"
)));
echo
$Php2Html_UrlString
.
"<br>"
;
// id|1@action|2
$Php2Html_UrlQueryStrList
=
explode
(
"@"
,
$Php2Html_UrlString
);
print_r(
$Php2Html_UrlQueryStrList
);
// Array ( [0] => id|1 [1] => action|2 )
echo
"<br>"
;
foreach
(
$Php2Html_UrlQueryStrList
as
$Php2Html_UrlQueryStr
)
{
$Php2Html_TmpArray
=
explode
(
"|"
,
$Php2Html_UrlQueryStr
);
print_r(
$Php2Html_TmpArray
);
// Array ( [0] => id [1] => 1 ) ; Array ( [0] => action [1] => 2 )
echo
"<br>"
;
$_GET
[
$Php2Html_TmpArray
[0]] =
$Php2Html_TmpArray
[1];
}
//echo '假静态:$_GET变量<br />';
print_r(
$_GET
);
// Array ( [id|1@action|2] => [id] => 1 [action] => 2 )
echo
"<br>"
;
echo
"<hr>"
;
echo
$_GET
[id].
"<br>"
;
// 1
echo
$_GET
[action];
// 2
?>
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
<?php
//伪静态方法二
// localhost/php100/test.php/1/2
$filename
=
basename
(
$_SERVER
[
'SCRIPT_NAME'
]);
echo
$_SERVER
[
'SCRIPT_NAME'
].
"<br>"
;
// /php100/test.php
echo
$filename
.
"<br>"
;
// test.php
if
(
strtolower
(
$filename
)==
'test.php'
){
if
(!
empty
(
$_GET
[id])){
$id
=
intval
(
$_GET
[id]);
echo
$id
.
"<br>"
;
$action
=
intval
(
$_GET
[action]);
echo
$action
.
"<br>"
;
}
else
{
$nav
=
$_SERVER
[
'REQUEST_URI'
];
echo
"1:"
.
$nav
.
"<br>"
;
// /php100/test.php/1/2
$script
=
$_SERVER
[
'SCRIPT_NAME'
];
echo
"2:"
.
$script
.
"<br>"
;
// /php100/test.php
$nav
=
ereg_replace
(
"^$script"
,
""
,urldecode(
$nav
));
echo
$nav
.
"<br>"
;
// /1/2
$vars
=
explode
(
"/"
,
$nav
);
print_r(
$vars
);
// Array ( [0] => [1] => 1 [2] => 2 )
echo
"<br>"
;
$id
=
intval
(
$vars
[1]);
$action
=
intval
(
$vars
[2]);
}
echo
$id
.
'&'
.
$action
;
}
?>
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
<?php
//伪静态方法三
function
mod_rewrite(){
global
$_GET
;
$nav
=
$_SERVER
[
"REQUEST_URI"
];
echo
$nav
.
"<br>"
;
$script_name
=
$_SERVER
[
"SCRIPT_NAME"
];
echo
$script_name
.
"<br>"
;
$nav
=
substr
(
ereg_replace
(
"^$script_name"
,
""
,urldecode(
$nav
)),1);
echo
$nav
.
"<br>"
;
$nav
=preg_replace(
"/^.ht(m){1}(l){0,1}$/"
,
""
,
$nav
);
//这句是去掉尾部的.html或.htm
echo
$nav
.
"<br>"
;
$vars
=
explode
(
"/"
,
$nav
);
print_r(
$vars
);
echo
"<br>"
;
for
(
$i
=0;
$i
<
Count
(
$vars
);
$i
+=2){
$_GET
[
"$vars[$i]"
]=
$vars
[
$i
+1];
}
return
$_GET
;
}
mod_rewrite();
$year
=
$_GET
[
"year"
];
//结果为'2006'
echo
$year
.
"<br>"
;
$action
=
$_GET
[
"action"
];
//结果为'_add'
echo
$action
;
?>
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<?php
//伪静态方法四
//利用server变量 取得PATH_INFO信息 该例中为 /1,100,8630.html 也就是执行脚本名后面的部分
if
(@
$path_info
=
$_SERVER
[
"PATH_INFO"
]){
//正则匹配一下参数
if
(preg_match(
"/\/(\d+),(\d+),(\d+)\.html/si"
,
$path_info
,
$arr_path
)){
$gid
=
intval
(
$arr_path
[1]);
//取得值 1
$sid
=
intval
(
$arr_path
[2]);
//取得值100
$softid
=
intval
(
$arr_path
[3]);
//取得值8630
}
else
die
(
"Path:Error!"
);
//相当于soft.php?gid=1&sid=100&softid=8630
}
else
die
(
'Path:Nothing!'
);
?>
|
如果不想使用php来实现伪静态,可是使用 apache,nginx,iis 等服务器自带的url rewrite 功能进行设置.
到此这篇关于基于php伪静态的实现方法解析的文章就介绍到这了,更多相关php伪静态的实现内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。
原文链接:https://www.cnblogs.com/ainiaa/archive/2010/07/25/1784564.html 。
最后此篇关于基于php伪静态的实现方法解析的文章就讲到这里了,如果你想了解更多关于基于php伪静态的实现方法解析的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 5 年前。 Improve
在 C# 静态方法中是否有一种方法可以引用定义该方法的类型? 在实例方法中,您可以通过以下方式确定类型: public void Foo() { Type type = this.GetTyp
WPF:静态、动态资源以及资源词典 静态资源与动态资源 我们常常会使用样式或者控件模板放在Window.Resources中,比如这样: 静态资源与动态资源使用如下: <Window
任何人都知道如何在共享/静态函数中动态加载控件?该函数本身位于 mustinherit/abstract 类中。 (这是 VB 中的 ASP.NET 项目)我想做这样的事情: VB: Publ
在我看来,静态/强类型编程语言最宝贵的一点是它有助于重构:如果/当您更改任何 API,那么编译器会告诉您该更改破坏了什么。 我可以想象用运行时/弱类型语言编写代码......但我无法想象没有编译器的帮
正如我的名字所暗示的,我是一名 .NET 开发人员,但我对 Java 的兴趣越来越大,并且我有兴趣学习更多其他语言,因为这有助于我学习更多关于编程的知识。 无论如何,我的问题是:不带参数/不使用状态的
我在java中使用WireMock来 stub POST请求。该请求返回一个存储在我本地的 json 正文文件。 stub 看起来像这样: wireMockServer.stubFor(get(url
Python 是否有类构造函数的机制,即每当首次引用类时(而不是创建该对象的实例时)调用的函数?我知道其他一些语言中也存在这种情况,但我还没有在 Python 中遇到过。 基本上,我想初始化该函数中的
Python 是否有类构造函数的机制,即每当首次引用类时(而不是创建该对象的实例时)调用的函数?我知道其他一些语言中也存在这种情况,但我还没有在 Python 中遇到过。 基本上,我想初始化该函数中的
这个问题已经有答案了: What is the difference between dynamic and static polymorphism in Java? (14 个回答) 已关闭 4 年
这个问题已经有答案了: 已关闭10 年前。 Possible Duplicate: Static initializer in Java 我想知道这个静态的东西(抱歉,这是我第一次遇到这个)对一个类有
如果c++应用程序是按以下方式组织的 //file1.cpp static Y sgObj = X::getInitObject(0); //declared in file scope //fil
我有一个抽象类(AvergedDataRecord),我需要进一步抽象(DataRecord),这样我就可以将它扩展到原始类和一个新的具体类(SummedDataRecord),并且我在获取某些方法时
我正在尝试制作一个字符串枚举。这是我到目前为止所得到的, private class TypedEnum : IEnumerable { public IEnumerator GetEnume
我选修了一门名为“安全代码”的类(class),在下一个作业中,我们应该对一些 C 文件和 JavaEE Web 项目进行静态/动态分析。 我检查了“源监视器”并在 C 文件上运行它,但是(除非我不知
我有两个类,一个是登录类,一个是用户类。在 loggedIn 类中,我想显示我在用户登录时所做的共享首选项。 loginPrefs = getSharedPreferences("loginprefe
我在同一个 Activity 中有两个静态 fragment ,在“fragmentA”中我有一个自定义列表,当一个项目被点击时必须在“fragmentB”中出现一个细节,细节只在我改变屏幕方向时出现
在 Java 中是未修改方法变量,缺少final,每次都重新初始化限定符 静态方法 实例方法 如果 1. 或 2.(或两者)的答案是 final 限定符允许 Java 执行优化并存储方法变量只有一次?
我有两个类相互交互。第一个是中心的,如下: public class Datenbank { double winkelPanel = 0; double groessePanel = 0; doub
我有一个 mysql 数据库,它连接基于 Web 的 php 应用程序和 FoxPro 应用程序(是的,foxpro)。在之前的“开发人员”被解雇后开始处理这个问题。 无论如何,我熟悉 AES_Enc
我是一名优秀的程序员,十分优秀!