- 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的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
如标题所示,我正在寻找有关伪/冒号 header 字段用途的一些信息,即我想知道为什么我们有第二种类型的 header 字段... 另外 - 我知道在 http2 中使用伪/冒号 header 字段代
(伪)多线程:借助外力 利用WEB服务器本身的多线程来处理,从WEB服务器多次调用我们需要实现多线程的程序。 QUOTE: 我们知道PHP本身是不支持多线程的, 但是我们的WEB服务器是支持多线程的
您如何在 HDL (verilog) 中实现硬件随机数生成器? 需要考虑哪些选项? 这个问题是在self-answer之后格式。鼓励添加答案和更新。 最佳答案 正如摩根的回答中所指出的,这只会产生一个
我写了这个CSS: div { width: 500px; height:150px; margin-left:150px; background: lightblue; } div:
这是我要解决的问题:从数据库A读取一个字符串,将该字符串转换为Date对象,将Date对象存储到数据库B中。 例)数据库A:从数据库A读入日期字符串“ 2015-03-08 02:00:00”,转换为
我想创建 std::fscanf() 的 sibling (我知道这是一个 C 函数)。所以,我的界面是这样的: template std::size_t ts_scanf(is, format,
运行 PostgreSQL 7.x(是的,我正在升级) 问题: 如果没有返回数据,我有三到四个字段需要设置。 正在考虑这样的事情 SELECT CASE WHEN default_fie
出于某种原因,我很难在 JS 中为我的游戏执行以下代码: 假设我们要求用户在棋盘上移动一个棋子。他们可以做的位置是位置A、位置B或位置C。每个位置一次只能容纳一件。否则为无效移动。 第一个用户决定
我已经毫无问题地编写了霍夫曼树的代码,但现在我希望在文件和树中添加伪 EOF,以便我知道何时停止从文件中读取。 我完全掌握了伪 EOF 的概念。我还了解到没有 ASCII 值 > 255 的字符。 我
给定一个按钮 ::after 当被触发时,伪 :after 类需要有一个类 search-active 切换,为按钮设置背景颜色 .primary .search:after, .primary
我想让第一行的文本像第二行一样缩进 (50px)。有什么办法吗?非常感谢! body{ counter-reset: h2counter; } h1{ counter-reset: h2counter
:before 或 :after 这样的伪元素是否可以从父元素的不同属性继承值? 在我的例子中,我有一个第三方组件设置其元素运行时的背景颜色...我需要继承该颜色并将其设置为伪元素的边框颜色。 最佳答
在并行循环中请求随机数总是返回相同的伪随机数。我怎样才能避免这种情况? % workers initialization: if matlabpool('size') == 0 matlabp
假设最大IP可以包含每个“点”括号中的最大数量999,即999.999.999.999 是最大的可用值。 我已经在计算器中检查了正则表达式 ([0-9]+.){3}[0-9]。那么,为什么程序抛出运行
我对随机数生成的概念非常陌生,我需要为用c编写的工作创建自己的算法(内置的随机数生成器对我不起作用)。 有人能给我介绍一个很好的主题,这样我就可以理解这个概念了吗?到目前为止,我所发现的一切似乎都是用
假设我有一个数字序列:{n, n+1, n+2, ... n+m} 在不提前存储数字的情况下,我想创建一个函数 f(),给定序列 {1,2,3,...m} 将以随机(或至少伪)的方式吐出原始集合随机)
什么是伪 tcp channel ,如何实现? 最佳答案 伪 TCP 是一种协议(protocol),它实现了 TCP 的一些思想,以通过不可靠的、基于数据包的接口(interface)提供可靠的数据
我正在尝试展开一些嵌套循环,以牺牲内存为代价(可能)获得更好的性能。在我的场景中,我最终会得到一个包含大约 3 亿个元素(元组)的列表,我必须以(或多或少)随机顺序产生这些元素。 在这个数量级上,ra
如何在 PHP 中生成(伪)随机字母数字字符串,例如:'d79jd8c'? 最佳答案 首先创建一个包含所有可能字符的字符串: $characters = 'abcdefghijklmnopqrstu
我有一段代码可以为玩家生成迷你任务。这很简单,要获得两个不同的点(起点和终点),我有一个如下所示的算法: std::vector missions; missions.push_bac
我是一名优秀的程序员,十分优秀!