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

时间:2013-04-04 03:59:29

标签: .htaccess mod-rewrite url-rewriting rewrite subdomain

我正在尝试以下列方式使用.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

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

2 个答案:

答案 0 :(得分:7)

首先,您需要通过创建一个名为*的子域名来添加通配符子域名,只有当您的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来测试它是否存在并且是一个目录。

答案 1 :(得分:0)

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

要捕获所有错误的子域名,请说我不小心输入metaa.stackoverlow.com,请使用通配符:*.stackoverflow.com。在cpanel中,这只是勾选一个复选框,询问'make wildcard?'或类似的。要直接编辑.htaccess,只需输入*代替每个特定的子域。

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

subdomain.site.com/*

*.site.com/dir

*.site.com/*