如何重定向不存在的子域?

Posted

技术标签:

【中文标题】如何重定向不存在的子域?【英文标题】:How do I redirect subdomains that do not exist? 【发布时间】:2013-03-25 23:58:39 【问题描述】:

我正在尝试以以下方式使用 .htaccess 进行重定向。我对.htaccess 不是很熟悉,所以我不确定它是否可以完成。另外,我不知道我打算如何遵循 SEO 的最佳做法。

www.domain.com                > domain.com 301

ks.domain.com                 > kansas.domain.com 301

ia.domain.com                 > iowa.domain.com 301

domain.com/sites              > domain.com 301

domain.com/sites/iowa         > iowa.domain.com 301

nonexistent.domain.com        > domain.com 302

domain.com/sites/nonexistent  > domain.com 302

我最大的问题是我是否可以检测到不存在的子域并重定向。我很想看看以上所有内容是如何完成的。

【问题讨论】:

@Johnsonmk2 接受的答案有什么不清楚的地方? 我想“不存在”实际上是指子域存在但没有对应的网站,对吗? 是的,亚历克西斯。这意味着如果我将所有*.domain.com 转发到domain.com/*,检测该文件夹(网站)是否不存在,然后重定向到domain.com。接受的答案非常详细地说明了如何执行此操作。 【参考方案1】:

首先,您需要通过创建一个名称为* 的子域来添加通配符子域,前提是您的虚拟主机允许您这样做。而且这个一定在你的.htaccess里,试试看是否有效:

Options +FollowSymlinks
RewriteEngine on

RewriteCond %HTTP_HOST ^www\.domain\.com
RewriteRule ^(.*)$ http://domain.com/$1 [R=301]

RewriteCond %HTTP_HOST ^ks\.domain\.com
RewriteRule ^(.*)$ http://kansas.domain.com/$1 [R=301]

RewriteCond %HTTP_HOST ^ia\.domain\.com
RewriteRule ^(.*)$ http://iowa.domain.com/$1 [R=301]

RewriteCond %HTTP_HOST ^domain\.com
RewriteCond %REQUEST_URI ^/sites/?$
RewriteRule ^(.*) / [R=301]

RewriteCond %HTTP_HOST ^domain\.com
RewriteCond %REQUEST_URI ^/sites/iowa/?$
RewriteRule ^(.*) http://iowa.domain.com/ [R=301]

RewriteCond %HTTP_HOST ([a-z0-9-]+)\.domain\.com$
RewriteCond %REQUEST_FILENAME !-f
RewriteRule ^(.*) http://domain.com/ [R=302]

RewriteCond %HTTP_HOST ^domain\.com
RewriteCond %REQUEST_URI ^/sites/([a-z0-9-_]+)/?
RewriteCond %REQUEST_FILENAME !-s
RewriteRule ^(.*) http://domain.com/ [R=302]

只需使用-f 来测试请求的文件是否存在并且是常规文件,-s 是否存在并且文件大小大于0 和-d 来测试它是否存在并且是目录。

【讨论】:

感谢您的帮助。它确实让我在设置我的 .htaccess 方面走了很长一段路。如果可以的话,我会投票赞成你回答。也许有一天。 是的。我最终做了一些不同的事情,因为我的结构发生了变化,但你的信息帮助我理解了我需要做什么。【参考方案2】:

如果您想要不存在的特定子域,那么您只需创建它们,然后重定向。

要捕获所有错误的子域,假设我不小心输入了metaa.stackoverlow.com,请使用通配符:*.***.com。在 cpanel 中,这仅涉及勾选询问“制作通配符?”的复选框。或类似的。要直接编辑 .htaccess,只需输入 * 代替每个特定的子域。

请注意,这也适用于任何目录:

subdomain.site.com/*

*.site.com/dir

*.site.com/*

【讨论】:

以上是关于如何重定向不存在的子域?的主要内容,如果未能解决你的问题,请参考以下文章

网站 web.config > 是不是可以将不正确的子域重定向到某个页面?

如果路由不在子域中,Laravel 子域路由重定向到 404

找不到子域时如何使网站重定向到页面[重复]

如何从子域重定向到其他域URI?

如何存储 jwt 令牌以便重定向到其他子域不需要凭据

如何将不存在的数据页面重定向到 Codeigniter 中未找到的页面?