源码论坛,商业源码下载,尽在锦尚中国商业源码论坛
标题:
Apache伪静态规则、写法10分钟搞明白
[打印本页]
作者:
洪七公
时间:
2023-4-7 09:12
标题:
Apache伪静态规则、写法10分钟搞明白
一.伪静态定义(百度百科)
伪静态是相对真实静态来讲的,通常我们为了增强搜索引擎的友好面,都将文章内容生成静态页面,但是有的朋友为了实时的显示一些信息。或者还想运用动态脚本解决一些问题。不能用静态的方式来展示网站内容。但是这就损失了对搜索引擎的友好面。怎么样在两者之间找个中间方法呢,这就产生了伪静态技术。就是展示出来的是以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伪静态规则、写法,更多内容请搜索锦尚中国获取,感谢大家的支持与厚爱!
学会以上技巧,基本伪静态规则 轻而易举可以实现!
欢迎光临 源码论坛,商业源码下载,尽在锦尚中国商业源码论坛 (https://bbs.52jscn.com/)
Powered by Discuz! X3.3