我在域名注册商处设置了通配符 A 记录。现在,如果用户访问我的域名上缺少的子域名,他们将被重定向到主页。目前我的初始设置如下:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
RewriteEngine On
RewriteRule ^(.*)$ http://domain.com$1 [R]
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
# more below...
</VirtualHost>
任何通配符子域名或通过 URL 输入我的 IP 都会重定向到主页。我可以对此做些什么,将通配符子域名重定向(可能是 HTTP 重定向)到 404 页面而不是主页吗?
答案1
禁用 RewriteEngine,并指定一个空目录作为 DocumentRoot:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/empty-directory-that-i-just-created
# more below...
</VirtualHost>
由于此 VirtualHost 使用空目录作为 DocumentRoot,Apache 将无法满足任何请求;它将对所有请求返回 404。
答案2
如果您想要 404 代码而不是这个代码的原因是“有效的永久错误代码”,那么您还可以考虑使用代码 [F] 重写为状态代码 403 并出现 403 错误页面。
DocumentRoot /some/valid/directory
ErrorDocument 403 /nothere.html
RewriteRule /nothere.html /nothere.html [L]
RewriteRule . - [F,L]
403 页面的重写规则是为了避免配置错误。