如何让 Apache /robots.txt 指向一个文件,而不考虑域?

How to have Apache have /robots.txt lead to a file, regardless of Domain?

我 运行 具有以下 URL 的本地服务器:

foo.self
bar.self
blah-blah.self

上面的URL由下面的VirtualHost语句处理:

<VirtualHost *:80>
    UseCanonicalName Off
    ServerName self
    ServerAlias *.self
    VirtualDocumentRoot C:\Users\Foo\PhpstormProjects\%-2
   <Directory C:\Users\Foo\PhpstormProjects\*>
      Options Indexes FollowSymLinks Includes ExecCGI MultiViews
      Order deny,allow
      Allow from all
      Require all granted
  </Directory>
</VirtualHost>

每个人都有自己的 /robots.txt,但我需要做的是让 URL 中的任何一个 return 完全相同,无论他们的 /robots.txt 是什么包含甚至不存在。例如,以下 URLs:

...将 return 相同的文本:

User-agent: *
Disallow: /

这没有诉诸 301 RedirectRewriteRule

只需在指向同一文件的主机配置中为 /robots.txt 创建一个别名。另外,可能需要 Location 指令才能授予访问权限:

<VirtualHost *:80>
    UseCanonicalName Off
    ServerName self
    ServerAlias *.self

    Alias /robots.txt C:\Somfolder\robots.txt
    <Location "C:\Somfolder\robots.txt">
      Order deny,allow
      Allow from all
    </Location>

    VirtualDocumentRoot C:\Users\Foo\PhpstormProjects\%-2
   <Directory C:\Users\Foo\PhpstormProjects\*>
      Options Indexes FollowSymLinks Includes ExecCGI MultiViews
      Order deny,allow
      Allow from all
      Require all granted
  </Directory>
</VirtualHost>

您将此添加到 所有 主机配置,所有这些 Alias 指令都指向同一个文件。正如您所描述的,文件 C:\Somfolder\robots.txt 是一个 "normal" robots.txt 文件。


您可以通过将该指令作为模式包含在内来简化此操作。这样你就可以将指令放在一个单独的配置文件中,并且只将 include 指令添加到你的主机配置中:

<VirtualHost *:80>
    UseCanonicalName Off
    ServerName self
    ServerAlias *.self

    Include C:\path\to\file\robots.inc

    VirtualDocumentRoot C:\Users\Foo\PhpstormProjects\%-2
   <Directory C:\Users\Foo\PhpstormProjects\*>
      Options Indexes FollowSymLinks Includes ExecCGI MultiViews
      Order deny,allow
      Allow from all
      Require all granted
  </Directory>
</VirtualHost>

文件C:\path\to\file\robots.inc

Alias /robots.txt C:\Somfolder\robots.txt
<Location "C:\Somfolder\robots.txt">
  Order deny,allow
  Allow from all
</Location>

请注意,我几乎不了解 MS-Windows 系统。所以我记下的示例路径可能没有意义。但是你应该能够明白这个想法:-)