将子域上的所有未使用链接重定向到域

时间:2014-12-27 13:42:45

标签: .htaccess redirect url-redirection

我想将subdomain.olddomain.com中未使用的所有链接重定向到newdomain.com 我试过这个,但它似乎不适用于子域

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

我设法制作下面的代码,但问题是它不会重定向或捕获所有未使用过的代码。它只重定向根并在访问未使用的链接时返回页面错误(例如标记)示例网址如下所示(OsCommerce)

sub.domain.com/product_info.php?products_id=999&osCsid=29f8a9504d1c4de90a1a1e4106344280

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

其他信息: 我要做的是将来自subdomain.olddomain.com的所有链接重定向到newdomain.com,例如当有人访问subdomain.olddomain.com/tags/vanilla或subdomain.olddomain.com/product_info.php?products_id= 999& osCsid = 29f8a9504d1c4de90a1a1e4106344280m它们将自动重定向到newdomain.com,newdomain.com位于另一台服务器服务器

1 个答案:

答案 0 :(得分:0)

来自the documentation(强调我的):

  

每个目录重写

     
      
  • 重写引擎可能会在.htaccess文件和部分中使用,但会有一些额外的复杂性。
  •   
  • 要在此上下文中启用重写引擎,您需要设置“RewriteEngine On”并且必须启用“Options FollowSymLinks”。如果   您的管理员已禁用了对FollowSymLinks的覆盖   用户的目录,然后你不能使用重写引擎。这个   出于安全原因需要限制。
  •   
  • 在.htaccess文件中使用重写引擎时,每个目录前缀(对于特定目录始终是相同的)是   自动删除RewriteRule模式匹配和   在任何亲戚之后自动添加(不是以斜线或   协议名称)替换遇到规则集的结尾。见   有关前缀的更多信息,请参阅RewriteBase指令   加回相关替换。
  •   
  • 如果您希望匹配每个目录(htaccess)RewriteRule中的完整URL路径,请使用%{REQUEST_URI}变量   的RewriteCond。
  •   
  • 删除的前缀始终以斜杠结尾,这意味着匹配对于从不具有前导斜杠的字符串。因此,一个   模式与^ /永远不会匹配每个目录上下文。
  •   
  • 虽然在语法上允许重写规则和部分(包括它们的正则表达式对应物),   这应该永远不是必需的,也是不受支持的。一个可能的特征   在这些背景下突破是相对替代。
  •   

.htaccess文件是每个目录的上下文,因此您的规则永远不会匹配任何内容。您的规则应如下所示:

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

这假设newdomain.com不使用此.htaccess文件,因为这会导致无限重定向。