如何在Apache服务器.htAccess rewrite伪静态时匹配url里的中文

如何在Apache服务器.htAccess rewrite伪静态时匹配url里的中文,第1张

配置Apache的伪静态,涉及到中文正则不能匹配,

匹配中文字符的正则表达式: [\u4e00-\u9fa5]

匹配双字节字符(包括汉字在内):[^\x00-\xff]

也试了,也不能匹配。

尝试匹配所有字母数字加上% ([a-zA-Z0-9_%]+)

也没有成功,查到Apache执行url会自动进行一次urldecode,传的值会还原成中文的,也不能匹配。

后来想到,把值进行两次 urlencode ,取的时候再进行两次 urldecode 用([a-zA-Z0-9_%]+)

就可以匹配了。

什么是伪静态

伪静态是相对真实静态来讲的,通常为了增强搜索引擎的友好面,都将文章内容生成静态页面,但是有的朋友为了实时的显示一些信息。或者还想运用动态脚本解决一些问题。不能用静态的方式来展示网站内容。但是这就损失了对搜索引擎的友好面。怎么样在两者之间找个中间方法呢,这就产生了伪静态技术。就是展示出来的是以html一类的静态页面形式,但其实是用ASP一类的动态脚本来处理的。

区别静态

1、从URL结构以及页面名称看,伪静态和静态页面是一样的。伪静态的页面后缀可以是htmlhtm或者是目录格式

2、伪静态只是改变了URL的表现形式,实际上还是动态页面

静态页面可以节省服务器资源,而伪静态严格说是增加服务器资源消耗的

3、总结,在SEO方面,伪静态和静态页面的功能是相同的,但是伪静态本质上还是动态页面,所以消耗资源是和动态页面一样的,而且因为Rewrite服务器还需要消耗额外的资源。

主要不足

1、CPU占有量

"如果流量稍大一些使用伪静态就出现CPU使用超负荷,比如同时在线300多人就挂了,而不使用伪静态的时候同时在线超500人都不挂,网站的IIS数是1000。由于伪静态是用正则判断而不是真实地址,分别显示哪个页面的责任也由直接指定转由CPU来判断了,所以CPU占有量的上升,是伪静态最大的弊病。

2、网站承受力低。

伪静态会造成网站可承受同时在线人数剧减。如果网站可以保证1000人同时访问的话,那么做了伪静态处理之后,300人访问就足以让网站挂掉。

3、网页打开慢。

伪静态页面打开速度快?伪静态仍然要读取数据库,还额外的多了一个重写网址的过程,其他的步骤绝对不会比动态少,所以不快!

4、大量的重复页面。

做了伪静态后,原有的页面也可以访问,这就造成了大量的伪静态页面和动态页面重复,对网站极为不好。

5、需要服务器支持。

并不是所有的服务器都支持伪静态的,这无形中又增加了成本。

所以,如果网址中的动态参数没有达到影响搜索引擎收录的程度,动态要比伪静态好的多。

6、造成真正的静态网页无法访问。

如果把php伪静态成html,那么真正的静态页就无法访问了。(可通过修改服务器配置解决。)

如何选择

1、使用真静态和伪静态对SEO来说没有什么区别

2、使用真静态可能将导致硬盘损坏并将影响站点性能(这个实在是个谬论,非静态的对硬盘的读取次数胜过真静态)

3、使用伪静态将占用一定量的CPU占有率,大量使用将导致CPU超负荷

4、最重要的一点,静态是为了SEO

5、真静态的访问速度明显比伪静态的访问速度要高

所以:

1、使用真静态的方法可以直接排除了,因为无论怎么生成,对硬盘来说都是很伤的。(这个完全是乱讲了,真静态可以提高网站的性能,减少数据库的访问压力,减少CPU和内存的压力。)

2、既然真伪静态的效果一样,可以选择伪静态了。

3、但是伪静态大量使用会造成CPU超负荷。

4、所以只要不大量使用就可以了。

5、既然伪静态只是给搜索引擎爬虫看的,只需伪静态给搜索引擎爬虫就行了,不需要给用户使用。

6、所以只要在专门提供给搜索引擎爬虫 (搜索引擎机器人)爬的Archiver中使用伪静态就可以了

通常,我们在美化或者希望能更好的兼容搜索引擎的时候我们常常使用nginx的rewrite模块来实现,例如:我们希望原本的访问链接xxxx.com/xx/xx/xx.php?id=12,变成这种:xxx.com/xx/xx/12.html;又或者是原本的访问链接太长,我们希望能够简洁一点等等吧,下面我将针对这两种情况来做配置。

(1) 页面伪静态

将xxxx.com/xx/xx/xx.php?id=12这种访问链接变成xxx.com/xx/xx/12.html这种

下面笔者在本地的网站目录下创建一个test.php文件

原本的访问链接: http://w.myblog.com/api/php/test.php?id=1 ,我们访问看下:

需要注意的是:rewrite 完后不能写break,否则php文件无法解析。

我们使用链接: http://w.myblog.com/api/php/1.html 来访问下,

解析php的那段避免累赘,这里就不再写上了。

我们访问看下: http://w.myblog.com/api/php/test-4.html

(2) 简化访问路径

使用过tp的或者其他一些类型的php框架小伙伴们我们在访问方法时需要这样访问: http://w.tp5.com/index.php/index/index/info ,这个表示访问index模块的index控制器中的info方法,但是这么访问不太方便,我们希望去掉index.php,直接使用 http://w.tp5.com/index/index/info 访问,那我们就需要配置下nginx,做一个rewrite.

这段配置的意思是:当访问的文件或者目录不存在时,重定向到某个php文件.

!-e 意思是:-e和!-e用来判断是否存在文件或目录。

last: 相当于apache里面的[L]标记,表示rewrite.

s:表示参数.

加上配置后我们再来访问下:

发现可以正常访问了。需要注意的是:如果不写s=xxx,配置会不生效。

好了,本篇文章就到这里了,有需要补充的小伙伴欢迎在下面给我留言哦,看到会及时回复的。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/138196.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-18
下一篇2023-03-18

发表评论

登录后才能评论

评论列表(0条)

    保存