源码论坛公告:本站是一个交流学习建站资源的社区论坛,旨在交流学习源码脚本等资源技术,欢迎大家投稿发言! 【点击此处将锦尚放在桌面

源码论坛,商业源码下载,尽在锦尚中国商业源码论坛

 找回密码
 会员注册

QQ登录

只需一步,快速开始

查看: 1976|回复: 0

[其他方面] Apache伪静态规则、写法10分钟搞明白

[复制链接]

3096

主题

3497

帖子

13万

金币

超级版主

Rank: 8Rank: 8

积分
270466
发表于 2023-4-7 09:12:45 | 显示全部楼层 |阅读模式
一.伪静态定义(百度百科)

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

就个人通俗语言讲的话,伪静态实际上是利用PHP把当前地址解析成另一种方法来访问网站,要学伪静态规则的写法,要懂一点正则

二.正则表达式教程

常用正则如下(先了解一下这个):

. 换行符以外的所有字符

\w  匹配字母或数字或下划线或汉字

\s  匹配任意的空白符

\d  匹配数字

\b  匹配单词的开始或结束

^   匹配字符串的开始

$  匹配字符串的结束

*   重复零次或更多次

+  重复一次或更多次

? 重复零次或一次

{n}  重复n次

{n,}  重复n次或更多次

{n,m}  重复n到m次

应用替换时,前面一个()中匹配的内容后面就用$1引用,第二个()中匹配的就用$2引用,,,,,,

这个()里面的东西叫原子组

分析一下discuz搜索引擎优化 htaccess里面的重写。

RewriteRule ^forum-([0-9]+)-([0-9]+)\.html$ forumdisplay.php?fid=$1&page=$2

首先加入用户通过 linuxidc.com/forum-2-3.html 访问discuz论坛,那么先通过.htaccess过滤,看看是否需要.htaccess引导一下用户,如果满足列出的一系列RewriteCond的 条件那么就进行重写,

discuz的没有列出RewriteCond 所以应该全部都进行重写。

所以开始进行转写,

forum-2-3.html 这个正好符合 列出的

^forum-([0-9]+)-([0-9]+)\.html$

正则表达式。并且 $1 为 2 ,$2为3 ,

所以代入后面,即 forumdisplay.php?fid=2&page=3 加上前面的RewriteBase 指定的文件目录,那么就带他到制定目录的forumdisplay.php?fid=2&page=3 。

三.实现伪静态有很多种办法,本文写的是其中Apache下的伪静态规则,也适用于iis安装了rewrite插件的环境:

1.根目录新建.htaccess文件

2.伪静态规则其实就是正则匹配,所以按照正则的规则来写就行,写一个比较简单的没有二级目录的大家看下:

<IfModule mod_rewrite.c>
                RewriteEngine on
                RewriteRule map.html map.php
</IfModule>

这样访问map.html实际是访问的map.php

四、常见的.htaccess应用举例(部分例子引自四个例子实战讲解.htaccess文件rewrite规则)

4.1 防止盗链,如果来得要访问jpe jpg bmp png结尾的url 用户不是来自我们的网站,那么让他看一张我们网站的展示图片。

RewriteEngine OnRewriteCond %{HTTP_REFERER} !^http://(.+.)?mysite.com/ [NC]RewriteCond %{HTTP_REFERER} !^$RewriteRule .*.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpg [L]

4.2 网站升级的时候,只有特定IP才能访问,其他的用户将看到一个升级页面

RewriteEngine onRewriteCond %{REQUEST_URI} !/upgrade.html$RewriteCond %{REMOTE_HOST} !^24\.121\.202\.30

RewriteRule $ http://www.52jscn.com/upgrade.html [R=302,L]

4.3把老的域名转向新域名

# redirect from old domain to new domainRewriteEngine OnRewriteRule ^(.*)$http://www.52jscn.com/$1[R=301,L]

五、常用示例

RewriteEngine On

RewriteRule index.html index.php

比如:

RewriteRule ^test([0-9]*).html$ test.php?id=$1

实际:http://www.52jscn.com/test8.html -> http://www.52jscn.com/test.php?id=8

RewriteRule ^cat-([0-9]+)-([0-9]+)\.html$ cat.php?id1=$1&id2=$2

实际:http://www.52jscn.com/cat-1-3.html -> http://www.52jscn.com/cat.php?id1=1&id2=3

RewriteRule ^cat-([a-zA-Z0-9\-]*)-([0-9]+)-([0-9]+)\.html$ cat.php?id0=$1&id1=$2&id2=$3

实际:http://www.52jscn.com/cat-zbc2ac-3-5.html -> http://www.52jscn.com/cat.php?id0=zbc2ac&id1=3&id2=5

RewriteRule ^cat1-([0-9]+)-([0-9]+)-([0-9]+)\.html$ cat1.php?id1=$1&id2=$2&id3=$3

实际:http://www.52jscn.com/cat1-4-3-8.html -> http://www.52jscn.com/cat1.php?id1=4&id2=3&id3=8

RewriteRule ^cat([0-9]*)/$ cat.php?id1=$1

实际:http://www.52jscn.com/cat5/ ->http://www.52jscn.com/cat.php?id1=5

RewriteRule ^catm([0-9]*)/([0-9]*)/$ catm.php?id1=$1&id2=$2

实际:http://www.52jscn.com/catm6/3/ -> http://www.52jscn.com/catm.php?id1=6&id2=3

其中不提倡贪婪模式,把0-9都改成([\d]*?)     *?允许空

好了,以上就是锦尚中国介绍的Apache伪静态规则、写法,更多内容请搜索锦尚中国获取,感谢大家的支持与厚爱!

学会以上技巧,基本伪静态规则 轻而易举可以实现!

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

锦尚中国源码论坛

聚合标签|锦尚中国,为中国网站设计添动力 ( 鲁ICP备09033200号 ) |网站地图

GMT+8, 2024-4-17 13:34 , Processed in 0.036896 second(s), 16 queries .

带宽由 锦尚数据 提供 专业的数据中心

© 锦尚中国源码论坛 52jscn Inc. 非法入侵必将受到法律制裁 法律顾问:IT法律网 & 褚福省律师 锦尚爱心 版权申诉 版权与免责声明