使用mod_rewrite优化seo

Mod_rewrite是一种用于给服务器发送指令的工具,当用户访问一个链接url的时候,服务器将会提供另外的资源。Mod_rewrite 使用正则表达式,因此可以根据需要处理尽量复杂的链接地址模式。

有两种方式可以更改apache的行为:修改Apache的全局配置或者创建目录相关的文件。

a)    全局配置文件交httpd.conf,用于规范Apache网站服务器的运行规则。

b)   .htaccess文件,用来规范当前目录和子目录内Apache如何运行。

1.    允许.htaccess重写

一个.htaccess文件其实就是一个文本文件,和.htconf一样没有扩展名。使用.htaccess文件需要服务器授予权限,允许其对服务器的行为修改生效。

例:

<Directory  />
        AllowOverrideNone
</Directory>

Httpd.conf文件中的Directory指令用于修改在特定目录下的Apache行为。在上面代码中,目标是根目录(/),这意味着Apache不允许在这台云计算机的任何,目录下进行规则重写修改。

AllowOverride指令的标记:

1)   AuthConfig,用于使用授权和验证。

2)   FileInfo,用于执行重定向个URL地址重写。

3)   Indexes,用于列举目录内容。

4)   Limit,用于限制对目录的访问.

5)   Options,用于设置目录的行为,比如执行CGI脚本或者列举目录内容的能力。

6)   All,所有。

7)   None,无。

举例来说,如果要允许AuthConfig和FileInfo规则在site目录内被重写,文件httpd.conf中应包含下面内容:

<Directory/path/to/site>
       AllowOverride AuthConfig FileInfo
</Directory>

由于这段代码在其他的AllowOverride None语句块之后,因此,如果在这个目录下或者其子目录下,其.htaccess文件可以对Apache的行为进行修改。

注意:

a)    如果某个目录下有一个.htaccess文件,但是在设置中不允许重写,那么这个文件将会被忽略。

b)   任意可以使用.htaccess文件来完成的功能都可以在httpd.conf文件中使用一个<Directory>来实现。

c)    默认情况下,Apache服务器不会在web浏览器中显示.htaccess文件,这是一种聪明的做法。

知识拓展:保护目录

.htaccess文件的另一种通常的用法就是保护某个目录的内容。

a)    拒绝一切访问的操作

b)   对授权用户限制访问

但是在一个PHP脚本中还是可以使用include(),require(),readfile()以及其他函数来访问到文件夹内的内容。

对授权的用户访问的限制可以有很多种方式,使用mod_auth模块应该是最基本的和最常用的一种方式。

2.    激活URL重写

Apache通过URL重写技术,可以将这种对用户很有好的链接URL转换为在PHP中可以使用的形式,这可以通过Apache的mod_rewrite重写来实现。要使用他,.htaccess文件中必须要检查该模块是否加载并且打开重写引擎。

<IfModulemod_rewrite.c>
       RewriteEngine on
</IfModuel>

打开了重写引擎之后,在关闭IfModule标签之前,我们可以添加一些规则来定义重写,语法是这样的:

RewriteRule matchrewrite

比如我们可以这么做:

RewriteRulesomepage.php otherpage.php

在代码中,一个用户在任何时候访问somepage.php页面都会为其展示页面otherpage.php的内容,尽管浏览器的地址栏中依然显示somepage.php。

说明白一点,这种方式的使用并不是很好的mod_rewrite的使用方式,如果想要达到这种意义的重定向,可以使用更加简单的mod_alias模块来代替。然后这么一行代码可以用一种最简单的方式来测试mod_rewrite功能是否正常。

使用正则表达式,将www.***.com/category/23www.***.com/category.php?id=23一样的效果,我们可以设置如下的规则:
RewriteRule  ^category/([0-9]+)/?$

Category.php?id=$1

最开始插入的(^)符号表明表达式必须匹配字符串的开始,之后是单词category,然后跟着一个斜线。美元符号关闭这个规则,这意味着最后可选的斜线之后不能有任何东西。

重写部分是真正被执行的, 这对网页浏览器或者终端用户来说都是毫不知情的。在这行代码中,指的就是category.php?id=$1 .这里$1用于向后引用到第一个括号所包括的组,也就是23,这样,这两个会被服务器解释为同一个对待。

使用URL重写之后不仅符合美学标准,还可以带来SEO的好处。考虑到URL本身对SEO排名的影响,一个明显的目录名称,会比参数传递值得脚本更加突出。说白了就是能尽量不用参数传递就不用。

 

【示例】实现mod_rewrite

创建一个新文件,命名为.htaccess.

记得确保创建的文件没有扩展名。并且也没有呗文本编辑器偷偷的加上扩展名。

或者,我们也可以在httpd.conf文件中编辑一个Directory元素。

# 号可以用来在文件中创建注释。

脚本如下:

# .htaccess
<IfModulemod_rewrite>
#Turn on theengine:
RewiriteEngineon
#Set the base tothis directory:
RewriteBase /ch02/
#Redirect certainpaths to index.php
RewriteRule^(about|contact|this|that)/?$ index.php ?p =$1
</IfModule>

第一行代码用于重写引擎没有打开时打开重写引擎。第二行代码用于设定重定向匹配需要应用的URL基本地址。第三行代码是使特定的地址URL重定向到index.php文件,并传递不同的页面请求。

注意:

由于地址栏的链接就像是引用到某个子目录。我们需要修改对外部资源的引用方式,在HTMl中将相对路径改为据对路径。

<link rel = “stylesheet”type = “text/css” href = “style/style/css” title = “style”>


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值