在.htaccess中重写以在域子文件夹中搜索robots.txt和sitemap.xml

时间:2013-11-15 00:16:40

标签: apache .htaccess mod-rewrite

我想编写一个rewriterule来搜索子文件夹中的robots.txt和sitemap.xml文件,这些文件与包含或不包含www的域名匹配。我们来举个例子:

  • 我有域名aaa.com,bbb.com和ccc.com
  • 它们都安装在同一根文件夹%{DOCUMENT_ROOT}
  • 可以使用或不使用www。
  • 访问它们

如果有人试图访问http://aaa.com/robots.txt文件,我想执行以下操作:

如果要求的文件是robots.txt {

  • 如果有与子文件夹匹配的文件%{DOCUMENT_ROOT} /aaa.com/robots.txt(提供此文件并停止)* 1
  • ElseIf文件与子文件夹匹配 %{DOCUMENT_ROOT} /www.aaa.com/robots.txt(提供此文件并停止)* 2
  • 否则提供文件%{DOCUMENT_ROOT} /robots.txt * 3

}

我不想对域名进行硬编码;我试图从请求中取出它们,但我无法检查条件* 2和* 3:

RewriteCond %{REQUEST_URI} ^/robots.txt$
RewriteRule ^robots\.txt$ /www\.%{HTTP_HOST}/robots\.txt [L]
RewriteCond %{REQUEST_URI} ^/sitemap.xml$
RewriteRule ^sitemap\.xml$ /www\.%{HTTP_HOST}/sitemap\.xml [L]

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

尝试:

# prevent any kind of looping:
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule ^ - [L]

# first check host/robots.txt
RewriteCond %{HTTP_HOST} ^(www\.)?(.*)$ [NC]
RewriteCond %{DOCUMENT_ROOT}/%2/%{REQUEST_URI} -f
RewriteRule ^(robots\.txt|sitemap\.xml)$ /%2/$1 [L]

# then check www.host/robots.txt
RewriteCond %{HTTP_HOST} ^(www\.)?(.*)$ [NC]
RewriteCond %{DOCUMENT_ROOT}/www.%2/%{REQUEST_URI} -f
RewriteRule ^(robots\.txt|sitemap\.xml)$ /www.%2/$1 [L]

# finally, do nothing and allow the "/robots.txt" request to resolve itself