Apache Rewrite是我们在网上中设置一些网址重定向常用的办法,我们在使用php程序替代robots.txt和sitemap.xml以及https替换http的时候都有用到。
其中robots.txt显示robots.php内容的部分是这样设置的:
# Rewrite robots.txt RewriteCond %{REQUEST_URI} ^\/robots\.txt$ RewriteRule ^(.*)$ /robots.php [L]
而http到https的跳转是这样设置的:
# http to https RewriteCond %{HTTPS} off # RewriteCond %{REQUEST_URI} !^.*(sitemap|robots) RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
但有个长期问题一直存在:http://example.com/robots.txt会跳转到https://example.com/robots.php,而不是跳转到https://example.com/robots.txt,后来就增加了RewriteCond %{REQUEST_URI} !^.*(sitemap|robots),这样http://example.com/robots.txt就不跳转了,不过这有存在担心百度爬取http的robots.txt和sitemap.xml,其中链接却是https的问题。
这个问题以前就一直放着没有解决,直到最近同事排查百度资源平台中网站地图的问题,又说起来,我自己考虑、尝试后,发现是两端代码顺序的问题,只要把http到https的跳转放在robots.txt显示robots.php的前面就可以解决了。
上面说的这种问题比较绕,没有这样设置过或者没有遇到这种问题的朋友就忽略吧。
补充:我们的.htaccess里面主要分为几段,顺序如下:
Drupal原带的.htaccess一部分放在顶部 拒绝一些爬虫的访问 纠正一些错误的路径 http跳转到https robots.txt读取robots.php内容 sitemap_xxx.xml读取sitemap.php内容 Drupal原带的.htaccess一部分放在底部
我们以前写的.htaccess还有些复杂了,如果不注意顺序,可能导致一些错误的发生或者一些失效。
评论