6

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

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

4

2 回答 2

7

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

于 2013-04-04T05:25:18.953 回答
0

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

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

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

subdomain.site.com/*

*.site.com/dir

*.site.com/*

于 2014-02-17T00:05:35.223 回答