我的 CMS 放在一個子檔案夾中,所以通過 .htaccess 我轉發所有內容。對 cms 有好處,下面的代碼段可以正常作業,但對 robots.txt 等檔案不利,這些檔案必須存盤在 web 根目錄中(例如https://domain.xyz/robots.txt)。如果我呼叫該 URL,瀏覽器和爬蟲將(當然)被轉發到https://domain.xyz/TEST
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://domain.xyz%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} !^domain\.xyz$ [NC]
RewriteRule ^ https://domain.xyz/TEST [L,R=301]
RewriteCond %{REQUEST_URI} !^/TEST
RewriteRule ^ https://domain.xyz/TEST [L,R=301]
</IfModule>
所以我必須跳過那個檔案,我會添加
RewriteCond %{THE_REQUEST} !/(robots\.txt|sitemap\.xml)\s [NC]
對于 之前的檔案 robots.txt 和 sitemap.xml RewriteRule,但它不起作用。怎么了?有人可以幫我嗎?謝謝你。
uj5u.com熱心網友回復:
可以說,這不是“轉發”,而是“重定向”,就像在外部重定向中一樣。轉發更常用于描述內部重寫(URL 不變)。
但對 robots.txt 等檔案不利,這些檔案必須存盤在網路根目錄中
不必要。它們不需要存盤在 Web 根目錄中(也不需要從其訪問)。Google 和其他搜索引擎在請求robots.txtXML 站點地圖和類似檔案時會遵循重定向。來自robots.txt 的 Google Docs - “處理錯誤和 HTTP 狀態代碼”:
3xx(重定向)
Google 遵循 RFC 1945 定義的至少五個重定向躍點,然后停止并將其視為 robots.txt 的 404。
但是,如果您愿意,您仍然可以包含例外,但是您的正則運算式中有錯誤...
RewriteCond %{THE_REQUEST} !/(robots\.txt|sitemap\.xml)\s [NC]
您在CondPattern末尾有一個錯誤的\s(文字空格字符) - 所以這永遠不會匹配并且條件總是成功的。也許你打算寫(字串結束錨)?您還缺少字串開頭的錨點。$
例如,它應該是:
RewriteCond %{THE_REQUEST} !^/(robots\.txt|sitemap\.xml)$ [NC]
或者,在現有規則之前包含一個正匹配規則 ,以防止在請求這些檔案之一時發生任何后續規則(即重定向):
# Prevent further processing if "robots.txt" or "sitemap.xml" requested
RewriteRule ^(robots\.txt|sitemap\.xml)$ - [NC,L]
RewriteRule ^ https://domain.xyz/TEST [L,R=301]
由于TEST是一個物理目錄,因此您應該在重定向的 URL 后附加一個斜杠,即。/TEST/, 否則 Apache (mod_dir) 將在斜杠后面附加第二個重定向。
您需要在測驗之前清除瀏覽器快取,因為 301(永久)重定向將被瀏覽器快取。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/472436.html
標籤:阿帕奇 .htaccess 改写 机器人.txt xml-站点地图
上一篇:創建型模式之門—簡單工廠
