How do I redirect subdomains that do not exist?

强颜欢笑 提交于 2020-01-21 05:02:24

问题


I am trying to redirect using .htaccess in the following fashion. I am not all that familiar with .htaccess, so I'm not sure it can be done. Also, I don't know if how I am intending to do it follows best practices for 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

My biggest question is if I can detect a nonexistent subdomain and redirect. I would love to see how all of the above is accomplished.


回答1:


First, you need to add wildcard subdomains by creating a subdomain with an * as its name, only if your web host allows you to do so. And this must be in your .htaccess, try to test it to see if it works:

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]

Just use -f to test if a requested file exists and is a regular file, -s if it exists and has a file size greater than 0 and -d to test if it exists and is a directory.




回答2:


If you want specific subdomains that do not exist, well you'll just have to create them, and then redirect.

To catch all erroneous subdomains, say I accidentally type metaa.stackoverlow.com, use a wildcard: *.stackoverflow.com. In cpanel, this just involves ticking a checkbox that asks 'make wildcard?' or similar. To edit .htaccess directly, just enter * in place of each specific subdomain.

Note that this also applies for any directories:

subdomain.site.com/*

*.site.com/dir

*.site.com/*



来源:https://stackoverflow.com/questions/15802257/how-do-i-redirect-subdomains-that-do-not-exist

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!