Apache通过写rewrite规则,强迫目录网址后面自动加斜杠
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Apache通过写rewrite规则,强迫目录网址后面自动加斜杠
在搜索引擎优化中,目录的权重一般要高于文件的权重。那么什么是网址目录,什么是网址文件呢?举个很简单的例子,你看了就会知道了,比如:/sale/,这是一个目录的网址,目录名称是sale,而/sale/view-6518.html,则是一个网页文件,文件名是view-6518.html。目录一般后面都会加斜杠,如果一个目录后面不加斜杠,比如/rent,则服务器对待的也是一个文件,而不是目录,只不过这个文件没有扩展名,文件名为rent,因此,搜索引擎也会认为这是一个文件,而不是一个目录,所以,/rent和/rent/其实在搜索引擎看来是两个截然不同的网址,但是在用户看来,他们都会认为是同一个页面的,因此经常会出现用户在浏览器敲网址时经常后面会不加斜杠。在windows系统,一般如果服务器如果识别目录有个名称是rent,但是根本没有文件名为rent时,他们会自动给目录加斜杠。但是,如果是linux系统,则不会,linux系统会把它作为文件处理,因此,如果根本不存在文件名是rent,而有目录名是rent时,在linux系统下打开/rent是无法显示的,因为他不会以目录形式处理,而是直接就打开rent文件,由于rent文件不存在,所以自然而然就打不开了。
以上说的是非伪目录的情况下,也就是上面所说的情形是服务器目录上真实存在sale,rent等目录的,而大多情况,很多网址都还是伪静态或者伪目录的,主要是为了对搜索引擎友好。在伪目录情况下,无论windows系统或者linux系统,如果网址是目录,但是后面不加斜杠的话,浏览器是不会自动给目录后面加斜杠的,为了解决这样一个问题,一般有两种方法,一种就是写rewrite规则,让他自动为目录后面没加斜杠的加斜杠。另一种是直接用php或者asp代码来实现301重定向。
第一种方法是实现:
这里是apache的伪静态规则
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/(.*)/
RewriteRule ^(.*)$ $1/ [L,R=301]
先来解释一下:RewriteCond %{REQUEST_URI} !^/(.*)/
这句的意思就是说假如输入的网址是目录形式,如/online但是后面没有加斜杠
RewriteRule ^(.*)$ $1/ [L,R=301]
这句的意思就是让这个没有加斜杠的目录后面自动加斜杠,并且告诉搜索引擎是301跳转如跳转为/online/
第二种方法是实现:
第二种适合伪目录的,一般用php来实现跳转
比如/news/这是一个伪目录,而/news也是伪目录,只不过这2个网址对应2个不同的php程序,/news/这个对应
的是真正显示新闻内容的php程序,而/news这个则是对应那个要处理给目录加斜杠并且告诉搜索引擎这是301重定向,代码为:
Header( "HTTP/1.1 301 Moved Permanently" ); //告诉http头为301永久重定向
Header( "Location: "/news/" );
?>