2011-07-05 21 views
0

状況:私は、それぞれが同じPleskベースのサーバを指している複数のエイリアスドメインを持つ単一(メイン)ドメインを持っています(例えば、私はexample.comをメインとして、 something.net,anotherone.co.uk、およびいくつかはすべてメインドメインアカウントのエイリアスとして)。つまり、エイリアスのアドレスバーにドメイン名を入力すると、メインドメイン(example.com)のアカウントに直接移動します。ドメインエイリアスの書き換えルール

が問題:エイリアス(ES)のドメイン名に基づいて、私はそれぞれ異なるドメインにリダイレクトindex.phpを持っている(例えば、企業サイトにリダイレクトするドメインAに要求し、ドメインBには、感謝のサイトに行きます等)どのドメインのURL(すなわちsomealias.com/something)の後にディレクトリが追加された場合は、404 not foundというエラーが発生します。

私が本当に感謝しているのは、誰かが私を助けてくれるならば、基本的にすべての後続のディレクトリやGETリクエストを取り除き、入力されたベースURLだけを残しておき、そのため、メインドメインのドキュメントルートにあるPHPスクリプトが引き継ぎ、リクエストを適切に処理できます。

奇妙なことに、私はどこでもこの(単純な)解決策を見つけることができませんでした。エイリアス化されたドメインごとに個別にルールを定義する必要があるのでしょうか?

答えて

0
RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_URI} !=/ 
RewriteCond %{REQUEST_URI} !=/index.php 
RewriteRule .* http://%{HTTP_HOST}/? [L] 

、次のことを試してみてくださいhttp://example.com/にリダイレクトされます)。

あなたはそれがそうでなければ、それはあり、実行するファイルを持つ必要があるとして、()あなたの実際の設定に応じて、ルートフォルダを打ったとき(Apacheは黙っhttp://example.com/http://example.com/index.phpに書き換えます実行取得されたファイルによってindex.phpを交換する必要があるかもしれませんエラーを表示する)。


代わりに(おそらくより良い - あなたの実際のセットアップや要件によって異なります)あなたはこれらのルールを使用することができます - これは非既存のURLのみをリダイレクトします。だから、あなたはあなたのサイト上の画像meow.pngを持っている場合、これらのルールは(http://example.com/meow.png)あなたがそれにアクセスできるようになります:

RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule .* http://%{HTTP_HOST}/? [L] 

UPDATE: あなたが設定ファイルにこれを配置しようとしている場合(httpd- vhost.confまたはhttpd.confの)は、これらのルールを使用します。

RewriteEngine On 

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f 
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d 
RewriteCond %{REQUEST_URI} !=/index.php 
RewriteRule .* http://%{HTTP_HOST}/? [L] 
+0

こんにちは。あなたの答えに多くの感謝!私は両方のオプションを試しました。残念ながら、これらのルールはメインドメインのトップレベルのvhost設定ファイル(ルートレベルのhtaccessなど)に入っているため、RewriteBaseはDirectoryディレクティブとしてしか使用できません。どちらの例も、近いうちに、前のリダイレクトされたURI文字列の終わりにindex.phpを追加することで、ブラウザを無限ループに送ります。しかし、もう少し弾薬を与えてくれました - ありがとうございました! – WalB

+0

1)あなたの質問に '.htaccess'タグを付けました。なぜあなたは.htaccessにルールを置くつもりがない場合にそれを使いましたか? 2)はい、RewriteBaseは設定ファイル - Directoryまたは.htaccessのみで使用することはできません。3)これらのルールは、設定ファイルに入れておけば少し変更する必要があります。 – LazyOne

+0

@ User829303 ** httpd.conf **や他の設定ファイルに置くことができるルールで私の答えを更新しました。 – LazyOne

0

これは、例えば(ルートフォルダ/(例えばhttp://example.com/)またはインデックスファイル(例えばhttp://example.com/index.php)を除くALL要求を取ると、ルートフォルダにリダイレクトされますhttp://example.com/some-url

#Options +FollowSymLinks 
RewriteEngine on 
RewriteCond %{HTTP_HOST} ^www.olddomain.com$[OR] 
RewriteCond %{HTTP_HOST} ^olddomain.com$ 
RewriteRule ^(.*)$ http://www.newdomain.com/$1 [R=301,L] 
+0

回答ありがとうございます。しかし、エイリアス化されたドメインごとにルールを物理的に設定することは、私が避けようとしているものです(私は現時点で15のエイリアスがあり、追加される可能性が高いです)。私は何とかルールセットを定義して、アドレスバーにベースURL(サーバー名)が入力されているかどうかを調べるようにします(たとえば、リクエストが** example.co.uk/somedir **の場合** example.com **に移動します - 同様にタイプされたサーバー名が** anotheralias.com/anotherdirの場合**動的に** anotheralias.com **に移動します)。問題が明確になることを願っています。 – WalB

0

すべてのサイトが(おそらく)同じコードベースを使用して、同じサーバー上でホストされているように私には思えます。 index.phpがフロントコントローラの場合は、すべてをindex.phpにリダイレクトし、index.phpの最初の行でどのフロントコントローラをロードするかを決めます(backend.phpなど)。
エイリアスのリストを維持する必要がなければ、[alias] => path-to-front-controllerのハッシュを定義できます。
メインドメインのフロントコントローラで、ハッシュに対してエイリアス名(たとえば$ _SERVER ['SERVER_NAME']を使用)をチェックし、適切なファイルをロードします。
新しいエイリアスを追加するたびに、ハッシュを追加して入力する必要があります。それらが動的に生成されない場合、このハッシュを維持することは面倒ではありません。