2012-01-19 11 views
0

これは部分的にはthis questionの反対であると確信していますが、いくつかの複雑さを伴う2つのパターです。mod_rewriteを使用した双方向URLマッピングと正規化

私は最近インストールJoomla!で(我々はtheorganization.comそれを呼ぶことにします)組織のサイトを継承し、誰かがちょうどそれが我々だけで「ポイント」することができます期待してホスティングのイベントのためにセカンダリドメイン(anevent.com)を行って買いました既存のサイトの該当するセクションにあります。はい、「マスキング」シンプル方向でこれを達成することができますが、私はURLを正規化して、などは(これはない無限ループですmod_rewriteを使用して両方の方向にそれをマッピングしたいと思います:1方向は301リダイレクト、もう1つはURLマスクです)

私は、既存のJoomla!上のイベントに関する情報をホストしたいと思います。インストールはセクションtheorganization.com/eventname/にアクセスし、これを新しいドメインに置き換えてください。 注: Joomla!書き換え自体を使用するので、ではなくは、theorganization.comというディレクトリの中の物理ディレクトリeventnameになります。 (もしそれがここで何をどのように影響するか/わからない。)

具体的には、私はJoomlaのコンテンツを提供するためにtheorganization.com/eventnameまたはanevent.com(とやwwwなしまたはスラッシュを末尾)のいずれかに行われたすべてのリクエストをしたいです!通常はtheorganization.com/eventname/となり、URLはwww.anevent.com/と表示されます。もちろん、これらのレベル以下のすべてのサブディレクトリとファイルも対応する必要があります。


Apache's mod_rewrite docsを見て、私は以下の試みを思いついた。 theorganization.comについては

RewriteEngine On 

# STRIP "www" IF PRESENT (undesired, but necessary for now due to other issues) 
RewriteCond %{HTTP_HOST} ^www.theorganization.com$ [NC] 
RewriteRule ^(.*)$ http://theorganization.com/$1 [R=301,L] 

RewriteCond %{REQUEST_URI} ^/eventname/?(.*)$ [NC] 
RewriteRule ^http://(www\.)theorganization.com/eventname/?(.*)$ "http://www.anevent.com/$2" [R=301,L] 

# ... 
# ... default Joomla! .htaccess code here ... 

多くの裁判の後、私はJoomlaのを忘れていることを発見しました!デフォルトで.htaccessに独自の書き換えがあり、誤って上書きしてしまいました。 (ありがたいことに、私はfound a replacementです。)しかし、2番目の(操作上の)リダイレクトは、そうするべきではありません。何が間違っているのでしょうか? anevent.comについては

:これはかなりうまく動作するようです

RewriteEngine On 

# ADD "www" IF MISSING 
RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 

# UNCONDITIONALLY DEFER ALL REQUESTS HERE TO theorganization.com/eventname/ 
RewriteRule ^(.*)$ http://theorganization.com/eventname/$1 [L] 

(私は最初のものは、仕事を得ることができます仮定に基づきます)。しかし、最後の行の無条件ルールは、301/302などのように振る舞い、http://theorganization.com/eventname/FOOをロードします。代わりに「マスキング」を達成するためにこれを変更すると、ユーザーはブラウザにhttp://www.anevent.com/FOOしか表示されませんが、依然として同じコンテンツに向けられます。最初の部分については

答えて

1

theorganization.comサイトaneventについては

RewriteEngine on 
RewriteBase/

#if its on theorganization.com domain 
RewriteCond %{HTTP_HOST} theorganization\.com$ [NC] 
#if the original request has eventname in it 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /eventname/ [NC] 
# redirect eventname to anevent.com 
RewriteRule ^eventname/(.*)$ http://www.anevent.com/$1 [R=301,L] 

のルートでご.htaccessファイルに以下を追加します。com:

ルールには完全修飾URLが含まれているため、自動的にリダイレクトされます。 以下のようにサーバー側の書き換えを行うために、以下のように変更しました。

RewriteEngine on 
RewriteBase/

#if not internal redirect 
RewriteCond %{ENV:REDIRECT_STATUS} !200 
RewriteRule ^(.*)$ theorganization.com/eventname/$1 [L] 
+0

各ドメインへのパスは、同じルート内の「theorganization.com」と「anevent.com」という名前のディレクトリです。このケースの2番目の例を編集できますか?また、最初の例で '^ [A-Z] {3,9} \'の機能は何ですか? –

+0

@TimParentiがフォルダ構造に一致するように変更されました。 '^ [A-Z] {3,9} \'はHTTPメソッドGET、PUTなどと一致させることです –

+0

最初のものは完全に動作します。ありがとう。しかし、2番目に内部サーバーエラーが発生しています。どのように原因を突き止めることができますか? –

関連する問題