1

すべてのトラフィックをサブドメインにリダイレクトしようとしています。

www.example.com、example.com、sub.othersite.com はすべて sub.othersite.com に書き換えます

それはうまくいきます。ここで、単一の URL をサブドメインへのリダイレクトから除外する必要があります

それで www.example.com/THE/URI が入ってきたら mod rewrite でサブドメインの書き換えを無視してメインドメインに送るようにしたい。

十分に単純に思えますが、すべてのドメイン (パークされているドメインもいくつかあります) が単一のドメインに集中してコンテンツを配信するようにする追加の書き直しがあるため、機能させることができません。

他にもいくつかの書き換え条件があります。それらはすべてここにリストされています。誰かが私を正しい方向に向けることができれば、基本的にこれを行う必要があります:

受信リクエストが /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> 
4

1 に答える 1

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>
于 2013-01-15T20:22:33.620 に答える