Mod Rewrite - 重定向到子域,但某些URL(codeigniter)除外

时间:2013-01-15 05:07:49

标签: apache mod-rewrite subdomain

我正在尝试将所有流量重定向到子域。

www.example.com,example.com,sub.othersite.com 全部改写为sub.othersite.com

效果很好。现在我需要将一个URL排除在重定向到子域

之外

因此,如果www.example.com/THE/URI进来,我希望mod重写忽略子域重写并将其发送到主域。

看起来很简单,但我无法让它工作,因为我有一个额外的重写,确保所有域(还有一些停放的域)漏斗到一个域来传递内容。

我还有其他一些重写条件。它们都列在这里。如果有人能指出我正确的方向 - 我基本上需要这样做:

如果传入的请求是/ THE / URI 然后转到www.example.com/THE/URI 除此以外 重写到sub.othersite.com

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /

  # ignore system folder
  RewriteCond %{REQUEST_URI} ^system.*
  RewriteCond $1 !^(client/*)   
  RewriteRule ^(.*)$ /index.php?/$1 [L]

  #Checks to see if the user is attempting to access a valid file,
  #such as an image or css document, if this isn't true it sends the
  #request to index.php
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond $1 !^(index\.php|images|robots\.txt|css)
  RewriteRule ^(.*)$ index.php?/$1 [L] 

  # if it is the SPECIAL URI redirect and EXIT
  RewriteCond $1 !^(/THE/URI)   
  RewriteCond %{HTTP_HOST} !^www.example.com$
  RewriteRule ^(.*)$ http://www.example.com/THE/URI [L]

  #catch all other traffic        
  RewriteCond %{HTTP_HOST} !^example.anothersite.com$
  RewriteRule ^(.*)$ http://example.anothersite.us/$1 


</IfModule> 

1 个答案:

答案 0 :(得分:1)

解决。 答案很简单。我只需要从最后的重写中排除URI和QUERY_STRING,因为重写的上半部分会在URL中附加一个查询字符串。

为了让我的应用程序工作,我仍然需要初始重写(接受任何URI并在内部将其映射到index.php?URI)

最终代码:

<IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteBase /

        #Removes access to the system folder by users.
        RewriteCond %{REQUEST_URI} ^system.*
        RewriteCond $1 !^(client/*)   
        RewriteRule ^(.*)$ /index.php?/$1 [L]

                # our URL is prepped now - query string appended, so let's redirect it
                # ONLY if it's not the ONE URL we need to keep

        RewriteCond %{REQUEST_URI} !^/THE/URI   
        RewriteCond %{QUERY_STRING} !^/THE/URI
        RewriteCond %{HTTP_HOST} !^sub.example.com$
        RewriteRule ^(.*)$ http://sub.example.com/$1  [R=302]
</IfModule>