之前的提到搜索引擎的索引排名的基础就是链接,而实际站点中链接都是指向的URL地址的,URL是明显影响单击率的因素。URL是一个页面的所有内容的地址,除了要对用户友好外(URL地址命名),最关键的就是对搜索引擎友好,因为这是每个页面索引的基础。
一、URL地址插入关键词的好处
1、对搜素引擎排名有好处,在正式的排名中URL地址起到的作用估计占到20%,主要是为了增加单击和一目了然的关联性。
2、鼠标经过链接文字时,URL会出现在浏览器状态栏,可以吸引单击。
3、基于关键词的URL比查询字符串更加容易记忆。
二、静态URL和动态URL
1、静态URL
定义为不包括查询字符串的URL地址。这样指向无参数的php脚本的URL也是静态的。即时是由php脚本生成的静态URL,对搜索引擎也不会有任何问题。
2、动态URL
包括一个用“?”开始的查询字符串,用于传递参数的URL。对于不同的查询字符串会有不同的输出内容,搜索引擎会当成是不同的页面,但其实是同一个php脚本生成的。但是脚本可能对不同的查询字符串输出同样的内容,这就可能导致重复内容的出现。同时,搜索引擎可能会尝试去掉多余参数,这样建立的索引可能有大量重复内容。
三、URL重写
基于Apache服务器的rewrite_module模块进行的的URL重写是非常的强大的一个功能,提供了一个基于正则表达式分析器的重写引擎来实时重写URL请求。
1、启用mod_rewrite
需要在Apache的服务器配置文件http.conf中打开
LoadModule rewrite_module modules/mod_rewrite.so
2、重写URL
分为服务器级(http.conf)和目录级(.htaccess)配置方式,两种配置的书写方式都相同。一般情况下优先使用前者,除非没有对主配置文件的访问权限。使用AllowOverride启用了.htaccess文件后,Apache每次都在所有目录中查找.htaccess文件,无论是否真的存在或用到,将会导致性能下降。另外,Apache必须在所有上级目录中查找.htaccess文件,从而使所有的指令都生效。同时,启用.htaccess修改权限后,会更改服务器的配置,从而可能带来意想不到的修改。
- RewriteBase:设置目录级重写的基准URL,作用域是directory、.htaccess。可以用于目录级的配置文件中并在局部范围起作用。只是剥离了本地路径前缀的一部分。如果网站服务器URL不与物理文件路径直接对应就要指定这个选项。重写后不用再重写根目录,将URL地址前的斜杠去掉了。
- RewriteCond:定义重写发生的条件,作用域是全部配置范围有效。在一个RewriteRule生效之前可以有一个或多个RewriteCond指令,仅当满足条件后才会进行后续的匹配。teststring是一个文本字符串,反向引用方法是 “ %N”(1<= N <=9),引用当前符合条件的分组成分。
- RewriteEngine:打开或关闭运行时的重写引擎。作用域为全局。设置为on或off。
- RewriteLog:设置重写引擎的日志文件名,作用域为服务器和虚拟主机配置。在每个服务器级别的配置中仅出现一次。要关闭重写操作的记录应该使用“RewriteLogLevel 0”,而不应该设置文件名为空。
- RewriteLogLevel:设置重写引擎的日志详细程度,作用域为服务器和虚拟主机。默认为0,表示不记录重写引擎日志。较高的level会是服务器速度急剧下降。大于2的level只能用于调试目的。
- RewriteRule:定义重写规则。作用域为全局。
‘skip | S=num’:强制跳过当前规则之后的num个规则继续执行,可以模拟if-then-else结构。
- RewirteLock:设置RewriteMap同步使用的锁文件名,作用域为服务器配置。
- RewriteMap:定义用于关键字查找的映射函数,在服务器和虚拟主机中配置。
四、重定向
1、301和302重定向
RewriteRule ^foo\.php$ /bar.php [R=301,L]
这条规则将foo.php重定向到bar.php,对于php脚本来说,可以不是用重写规则实现,直接使用header函数,返回一个含有Location的头,当没有明确提供状态码时默认为302临时重定向。
2、多个域名的重定向
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.example\.com
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]