Apache通过写rewrite规则,强迫目录网址后面自动加斜杠 在搜索引擎优化中,目录的权重一般要高于文件的权重。那么什么是网址目录,什么是网址文件呢?举个很简单的例子,你看了就会知道了,比如:http://www.live754.com/sale/,这是一个目录的网址,目录名称是sale,而http://www.live754.com/sale/view-6518.html,则是一个网页文件,文件名是view-6518.html。目录一般后面都会加斜杠,如果一个目录后面不加斜杠,比如http://www.live754.com/rent,则服务器对待的也是一个文件,而不是目录,只不过这个文件没有扩展名,文件名为rent,因此,搜索引擎也会认为这是一个文件,而不是一个目录,所以,http://www.live754.com/rent和http://www.live754.com/rent/其实在搜索引擎看来是两个截然不同的网址,但是在用户看来,他们都会认为是同一个页面的,因此经常会出现用户在浏览器敲网址时经常后面会不加斜杠。在windows系统,一般如果服务器如果识别目录有个名称是rent,但是根本没有文件名为rent时,他们会自动给目录加斜杠。但是,如果是linux系统,则不会,linux系统会把它作为文件处理,因此,如果根本不存在文件名是rent,而有目录名是rent时,在linux系统下打开http://www.live754.com/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} !^/(.*)/ 这句的意思就是说假如输入的网址是目录形式,如http://www.live754.com/online 但是后面没有加斜杠 RewriteRule ^(.*)$ $1/ [L,R=301] 这句的意思就是让这个没有加斜杠的目录后面自动加斜杠,并且告诉搜索引擎是301跳转 如跳转为http://www.live754.com/online/ 第二种方法是实现: 第二种适合伪目录的,一般用php来实现跳转 比如http://www.live754.com/news/这是一个伪目录,而http://www.live754.com/news也是伪目录,只不过这2个网址对应2个不同的php程序,http://www.live754.com/news/这个对应 的是真正显示新闻内容的php程序,而http://www.live754.com/news这个则是对应那个要处理给目录加斜杠并且告诉搜索引擎这是301重定向,代码为: <?php Header( "HTTP/1.1 301 Moved Permanently" ); //告诉http头为301永久重定向 Header( "Location: "http://www.live754.com/news/" ); ?>
Apache通过写rewrite规则,强迫目录网址后面自动加斜杠
最新推荐文章于 2020-12-05 19:26:14 发布