当前位置

更改.htaccess里面跳转的顺序

James Qi 在 2020年4月12日 - 22:36 提交

  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还有些复杂了,如果不注意顺序,可能导致一些错误的发生或者一些失效。

自由标签:

添加新评论

Plain text

  • 不允许使用HTML标签。
  • 自动将网址与电子邮件地址转变为链接。
  • 自动断行和分段。