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

.htaccess 如何重定向不存在的子域?,.htaccess,mod-rewrite,url-rewriting,rewrite,subdomain,.htaccess,Mod Rewrite,Url Rewriting,Rewrite,Subdomain,我正在尝试以以下方式使用.htaccess重定向。我对.htaccess不太熟悉,所以我不确定它是否可以完成。另外,我不知道我打算怎么做,它是否遵循搜索引擎优化的最佳实践 www.domain.com > domain.com 301 ks.domain.com > kansas.domain.com 301 ia.domain.com > iowa.domain.com 301

我正在尝试以以下方式使用.htaccess重定向。我对.htaccess不太熟悉,所以我不确定它是否可以完成。另外,我不知道我打算怎么做,它是否遵循搜索引擎优化的最佳实践

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

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

首先,您需要添加通配符子域,方法是创建一个名为
*
的子域,前提是您的web主机允许您这样做。这必须在您的
.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
测试它是否存在并且是目录。

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

要捕获所有错误的子域,假设我意外键入了
metaa.stackoverlow.com
,请使用通配符:
*.stackoverflow.com
。在cpanel中,这只需要勾选一个复选框,该复选框会询问“生成通配符”或类似问题。要直接编辑.htaccess,只需在每个特定子域中输入
*

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

subdomain.site.com/*

*.site.com/dir


*.site.com/*

非常感谢您的帮助。它确实让我在设置.htaccess上走了很长的路。如果可以的话,我会投你的票。也许有一天,是的。由于我的结构发生了变化,所以我最终的做法有所不同,但您的信息帮助我了解了我需要做什么。@Johnson MK2接受的答案有什么不清楚的地方?我想“不存在”实际上是指子域存在,但没有相应的网站,对吗?是的,Alexis。意思是如果我将所有
*.domain.com
转发到
domain.com/*
,检测该文件夹(网站)是否不存在,然后重定向到
domain.com
。公认的答案是关于如何做到这一点非常详细。