什么是.htaccess重定向代码来执行以下操作?

时间:2011-05-29 18:35:59

标签: .htaccess mod-rewrite

为了论证,让我们假装:

  • 我的域名是mydomain.com
  • 我有子域名,例如svn.mydomain.com

我想:

  • 如果此人输入mydomain.com以外的任何内容,例如mydomain2.com,则必须重定向到mydomain.com
  • 如果此人键入任何没有子域名的域名,则必须重定向到www.mydomain.com,请注意,此规则不得影响子域名,例如svn.mydomain.com
  • 如果svn.mydomain2.com中的类型,则必须重定向到svn.mydomain.com

任何帮助?

到目前为止的解决方案:

RewriteCond %{HTTP_HOST} !^(www\.)?namhost\.com$ [NC]
RewriteRule (.*)  http://www.namhost.com/$1 [R=301,L]

这会将任何不包含namhost.com的内容重定向到www.namhost.com。例如:namhost.net - > namhost.com,www.namhosting.com - > namhost.com。现在我只需要规则:

  1. 不包括“localhost”被重定向到www.namhost.com
  2. 更改子域重定向到namhost.com。例如:someSubDomain.parkeddomain.com必须转到someSubDomain.namhost.com。一个真实的例子:ftp.namhosting.com - > ftp.namhost.com
  3. 谢谢!

4 个答案:

答案 0 :(得分:3)

RewriteEngine On


#check if it's not mydomain.com
RewriteCond %{HTTP_HOST} !^(www\.)?mydomain\.com$ [NC]
#check if it's not a subdomain
RewriteCond %{HTTP_HOST} !^(.*)\.([A-Za-z0-9\-]+)\.(.{2,3}) [NC]
RewriteCond %{HTTP_HOST} ^(www\.)?([A-Za-z0-9\-]+)\.(.{2,3}) [NC]
#check if it's not one of determind sub-domains
RewriteCond %{HTTP_HOST} !^(svn|sql|pdf)\.([A-Za-z0-9\-]+)\.(.{2,3})$
#Redirect request to mydomain.com
RewriteRule (.*)  http://www.mydomain.com/$1 [R=301,L]


#check if it's sub-domain and it's not mydomain.com's subdomain
RewriteCond %{HTTP_HOST} !^(www\.)?mydomain.com$ [NC]
RewriteCond %{HTTP_HOST} ^(svn|sql|pdf)\.mydomain\.com$
RewriteCond %{HTTP_HOST} ^(svn|sql|pdf)\.([A-Za-z0-9\-]+)\.(.{2,3})$  [NC]
RewriteRule (.*)  http://%3.mydomain.com/$1

请告诉我,如果需要更改!: - )

RewriteCond %{HTTP_HOST} !^(.*\.)?namhost\.com$ [NC]
RewriteCond %{HTTP_HOST} !^localhost$ [NC]
RewriteRule (.*)  http://%1namhost.com/$1 [R=301,L]

答案 1 :(得分:2)

我使用这样的东西......

RewriteEngine On

RewriteCond %{http_host} ^mydomain.com [NC]
RewriteRule ^(.*)$ http://www.mydomain.com/$1 [R=301,L]

你也可以通过做这样的事情重定向到https ......

RewriteCond %{http_host} ^mydomain.com/login.php [NC]
RewriteRule ^(.*)$ https://www.mydomain.com/login.php [R=301,L]

答案 2 :(得分:1)

您的 Rule1 没有明确的子域名

  

如果此人输入mydomain.com以外的任何内容,例如mydomain2.com,则必须重定向到mydomain.com

所以 Rule2 似乎与 Rule1

相矛盾
  

如果此人键入任何没有子域的域,则必须重定向到www.mydomain.com

即。 Rule1 mydomain2.com将转到mydomain.com,但是 Rule2 ,因为它没有子域,它会转到{{1 }}

我会假设在Rule1中你的意思是www.mydomain.com应该转到anysubdomain.non-mydomain.com。如果没有,请澄清,因为以下规则是基于这一假设。

尝试将以下内容添加到您网站根目录中的.htaccess

www.mydomain.com

答案 3 :(得分:1)

我在这里应用Occam's razor,假设您的条件是互斥的(因此[L]用于[last]规则),并且重定向到域总是意味着重定向到文档根目录。您应该知道mod_rewrite is capable of much more

  

如果此人输入mydomain.com以外的任何内容,例如   mydomain2.com,它必须重定向到mydomain.com

将是

RewriteCond %{HTTP_HOST} !^mydomain\.com$
RewriteRule ^/.*$ http://mydomain.com/ [R,L]
  

如果此人键入任何没有子域的域,则必须重定向到www.mydomain.com,   请注意,此规则不得影响子域名,例如svn.mydomain.com

将是

RewriteCond %{HTTP_HOST} ![^.]+\.[^.]+\.[^.]+$
RewriteRule ^/.*$ http://www.mydomain.com/ [R,L]

  

如果[y]键入svn.mydomain2.com,则必须重定向到svn.mydomain.com

将是

RewriteCond %{HTTP_HOST} ^svn\.mydomain2\.com$
RewriteRule ^/.*$ http://svn.mydomain.com/ [R,L]

未测试。