3

古いドメインを新しいサブドメインにリダイレクトしようとしていますが、ブラウザのアドレス バーに古いドメインが表示されるようにしています。

私はそれを行うためにhtaccessを使用しましたが、アドレスバーに古いドメインが表示されたままになることを除いて、すべてが機能します。

もう 1 つの重要な点は、url および GET 変数内のフォルダーを維持する必要があることです。

これを実現するためにiフレームを使用したくないので、htaccessを介してこれらすべてをエレガントに実行しようとしています。

ここに私がこれまで使ってきたコードがあります。ブラウザのアドレスバーに古いドメイン名を維持することを除いて、それは機能します.

私の質問は、リダイレクト後にブラウザーのアドレスバーに古いドメイン名を表示し続けるにはどうすればよいですか? これは「コンテンツのプロキシ」と呼ばれるものによって実行できるとどこかで読みましたが、間違っている可能性があります。それがどのように機能するかもわかりません。

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteBase /

RewriteCond %{HTTP_HOST} ^domain.com [nc]
RewriteRule ^(.*)$ http://subdomain.domain.com/$1 [r=301,nc,L]

RewriteCond %{HTTP_HOST} ^www.domain.com [nc]
RewriteRule ^(.*)$ http://subdomain.domain.com/$1 [r=301,nc,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

</IfModule>

更新

さて、私はさらに一歩を踏み出しました。次のコードは、Web サイトのファイルをルートのサブディレクトリに配置すると機能します。

ただし、まだ問題があります。example.com を example.com/subdirectory にリダイレクトしますが、 example.com/index.php を example.com/subdirectory/index.php にリダイレクトしません。

index.phpを含むすべてのファイルで機能するように、私はまだそれを行う方法を理解しようとしています。

#Redirect  a domain to a subdirectory, while displaying only the domain and not the  subdirectory in the browser address bar.
<IfModule mod_rewrite.c>

Options +FollowSymLinks

RewriteEngine On

RewriteBase /

RewriteCond %{HTTP_HOST} ^example.com [nc]
RewriteRule ^$ /subdirectory/ [nc,L,QSA]

RewriteCond %{HTTP_HOST} ^www.example.com [nc]
RewriteRule ^$ /subdirectory/ [nc,L,QSA]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

もう1つ注意してください。私のウェブサイトのすべての要素は相対パスを使用するため、Web サイトの HTML の相対パスがファイルの間違ったルート ディレクトリを参照していたため、リライタルールが原因で動作させるために、HTML ルートをサブディレクトリに設定する必要がありました。 . つまり、サブディレクトリではなく、実際のルート ディレクトリにリンクしていました。次のように、html ルート/ベースをサブディレクトリに設定します。

<head>
<base href="http://<?php echo $_SERVER['HTTP_HOST']; ?>/subdirectory/" />
</head>

アップデート:

さて、私はさらに一歩を踏み出しました。次のコードは、Web サイトのファイルをルートのサブディレクトリに配置すると機能します。

ただし、まだ問題があります。example.com を example.com/subdirectory にリダイレクトしますが、 example.com/index.php を example.com/subdirectory/index.php にリダイレクトしません。

index.phpを含むすべてのファイルで機能するように、私はまだそれを行う方法を理解しようとしています。

#Redirect  a domain to a subdirectory, while displaying only the domain and not the  subdirectory in the browser address bar.
<IfModule mod_rewrite.c>

Options +FollowSymLinks

RewriteEngine On

RewriteBase /

RewriteCond %{HTTP_HOST} ^example.com [nc]
RewriteRule ^$ /subdirectory/ [nc,L,QSA]

RewriteCond %{HTTP_HOST} ^www.example.com [nc]
RewriteRule ^$ /subdirectory/ [nc,L,QSA]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

もう1つ注意してください。私のウェブサイトのすべての要素は相対パスを使用するため、Web サイトの HTML の相対パスがファイルの間違ったルート ディレクトリを参照していたため、リライタルールが原因で動作させるために、HTML ルートをサブディレクトリに設定する必要がありました。 . つまり、サブディレクトリではなく、実際のルート ディレクトリにリンクしていました。次のように、html ルート/ベースをサブディレクトリに設定します。

<head>
<base href="http://<?php echo $_SERVER['HTTP_HOST']; ?>/subdirectory/" />
</head>
4

2 に答える 2

0

書き換えルールのドメインが一致しない場合、Apache はアドレス バーを書き換えます。

 RewriteCond %{HTTP_HOST} ^(www\.)?domain.com
 RewriteRule ^(.*)$ subdomain_directory/$1 [QSA L]

同じディレクトリにない場合は、サブドメイン ディレクトリにリンクするシンボリック リンクをドメイン ディレクトリに作成できます。これは機能するはずです。FollowSymlinksまたはSymLinksIfOwnerMatch、まだ設定されていない場合は許可する必要があります。

于 2013-05-10T21:03:37.950 に答える