如何让 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:
- foo.self/robots.txt
- bar.self/robots.txt
- blah-blah.self/robots.txt
...将 return 相同的文本:
User-agent: *
Disallow: /
这没有诉诸 301 Redirect
或 RewriteRule
。
只需在指向同一文件的主机配置中为 /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 系统。所以我记下的示例路径可能没有意义。但是你应该能够明白这个想法:-)
我 运行 具有以下 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:
- foo.self/robots.txt
- bar.self/robots.txt
- blah-blah.self/robots.txt
...将 return 相同的文本:
User-agent: *
Disallow: /
这没有诉诸 301 Redirect
或 RewriteRule
。
只需在指向同一文件的主机配置中为 /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 系统。所以我记下的示例路径可能没有意义。但是你应该能够明白这个想法:-)