搜索引擎优化高级编程:php版(URL重写(Rewrite)是伪静态设置成功了吗?)

优采云 发布时间: 2022-01-22 23:19

  搜索引擎优化高级编程:php版(URL重写(Rewrite)是伪静态设置成功了吗?)

  URL重写(Rewrite)是拦截传入的Web请求并自动将它们重定向到其他URL的过程。例如,当浏览器向 hostname/list_1 发送请求时,服务器会自动将此请求定向到 . 这种技术通常用于搜索引擎优化 (SEO)。

  伪静态也是覆盖的一种实现。例如,如果论坛 URL 是 forum-17-1.html,则实际地址可能是 forum.php?fid=17&page=1,其中第一个数字是论坛 ID,第二个数字是页码. 这样的 URL 看起来比较短,没有很多 & 和 GET 参数。不仅用户喜欢这种友好的网址,搜索引擎也喜欢这种简洁明了的网址。

  实现 URL 重写有两种方式:

  纯代码实现,通过解析PATH_INFO来实现。

  服务器实现,例如使用 Apache 的 mod_rewrite 模块。

  下面先介绍使用mod_rewrite重写的方法。例如,将列表页list.php?mode=A重写为伪静态list-A.html,步骤如下(假设项目根目录为E:/dev/www/php/new )。

  首先,配置 Apache。在 httpd.conf 中删除下面显示的行前面的 # 以启用重写规则。

  #LoadModule rewrite_module modules/mod_rewrite.so

  在对应的配置项下设置AllowOverride All。

  在 网站E:/dev/www/php/new 目录下新建一个 .htaccess 文件,输入以下内容:

  重写引擎开启

  重写规则 index.html index.php

  重写规则列表-([AZ]+)\.html$ list.php?mode=$1 [NC]

  重启阿帕奇。立即访问以查看效果。可以看到访问和指向的是同一个页面,说明伪静态设置成功。

  现在逐点解释其原理。

  Apache 启用 Rewrite 模块,默认情况下禁用。

  设置AllowOverride All的目的是为了让.htaccess文件生效;如果 AllowOverride 设置为 none,则 .htaccess 文件将被完全忽略。

  创建一个新的 .htaccess 文件。.htaccess 文件是 Apache 中一个重要的配置文件,其格式为纯文本。它提供了一种更改目录配置的方法,方法是将收录一个或多个指令的文件放在特定的文档目录中,作用于该目录及其所有子目录。

  请注意,不允许在 Windows 资源管理器中创建 .htaccess 文件。您可以在命令行窗口中输入“echo>.htaccess”来创建一个新文件。

  下面是.htaccess 中每一行代码的解释。

  1)开启运行时重写功能,默认关闭:

  重写引擎开启

  2)创建重写规则将index.php重写为index.html:

  重写规则 index.html index.php

  显然,这是一个伪静态,而“index.html index.php”是最简单的正则表达式。

  3)将原地址list.php?mode=$1改写为list-([AZ]+)\.html$:

  RewriteRule list-([AZ]+)\.html$ list.php?mode=$1[NC]

  其实上面的代码可以理解为,如果Apache遇到一个匹配正则表达式list-([AZ]+)\.html$的请求,它首先捕获第一个括号中的值(这是紧跟在list- , 一个以.html结尾的字母),然后重定向到真正的请求地址list.php?mode=$1,$1就是正则表达式中的反向引用。这就是重写的语义。括号中的“NC”表示不区分大小写。

  如果这个页面有分页怎么办?例如 list.php?mode=A&page=2。为了使 URL 更有意义,将地址重写为 list-A-page-2.html。根据葫芦和瓢,在现有的基础上增加一条规则:

  RewriteRule list-([AZ]+)-page-(\d?)\.html$ list.php?mode=$1&page=$2

  现在尝试直接访问 list-A-page-2.html。由于 RewriteEngine 已打开,因此此步骤不需要重新启动 Apache。虽然现在可以访问了,但是你不觉得这样写很麻烦吗?

  第二条和第三条重写规则都是针对list.php文件的,可以合二为一吗?答案是肯定的。完整的.htaccess文件如下:

  重写引擎开启

  重写规则 index.html index.php

  #RewriteRule list-([AZ]+)\.html$ list.php?mode=$1 [NC] 这一行是注释

  RewriteRule list-([AZ]+)(?:-page-)?(\d?)\.html$ list.php?mode=$1&page=$2 [NC]

  新的重写规则是最常用的正则表达式,例如用于非捕获匹配的“?:”。只要你了解正则表达式,并用 Apache 手册对其进行补充,掌握 URL 重写就变得轻而易举。

  建议Nginx也可以实现静态URL,语法几乎没有区别,都是基于正则表达式。

  网站 使用 URL 重写有什么好处?

  1)有利于搜索引擎爬取。因为现在大多数搜索引擎更喜欢抓取一些静态页面。现在页面上的大部分数据都是动态显示的。这就需要把动态页面变成静态页面,有利于搜索引擎的爬取。

  2)更容易让用户记住。很少有用户关心网站页面地址,但是对于大中型的网站来说,增强可读性是很有必要的。

  3)隐藏的实现技术。避免暴露所采用的技术,为攻击增加障碍网站。尤其是上面提到的攻击方式,参数是隐藏的,一定程度上增加了攻击的难度。

  重写也帮助我们做很多事情,比如简单的下载处理。比如现在需要提供外部文件下载服务,比如下载php.rar文件。下载前需要做很多额外的工作,比如判断下载权限、服务器分流等,这不是简单的文件链接可以处理的,需要服务器端脚本进行一些复杂的处理。通过URL重写,可以将对php.rar文件的请求重定向到对PHP文件的请求,在这个PHP文件中进行判断,满足所有判断后输出文件。假设当前项目目录为 E:\www\php\download,则对 E:\www\php\download\php.rar 的请求现在应该指向一个 PHP 文件。将以下代码添加到当前目录下的 .htaccess 文件中:

  重写引擎开启

  RewriteRule (.*\.(rar|zip|chm))$ down.php?file=$1 [NC]

  down.php中的代码如下:

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线