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還有些複雜了,如果不注意順序,可能導緻一些錯誤的發生或者一些失效。
评论