.htaccessサブドメインをディレクトリに書き換えます


回答:


107

これを.htaccessファイルに入れてみてください。

RewriteEngine on
RewriteCond %{HTTP_HOST} ^sub.domain.com
RewriteRule ^(.*)$ /subdomains/sub/$1 [L,NC,QSA]

より一般的なルール(だけでなく、任意のサブドメインで機能するsub)については、最後の2行を次のように置き換えます。

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com
RewriteRule ^(.*)$ subdomains/%1/$1 [L,NC,QSA]

3
Ansariのソリューションは機能http://test.domain.comしますが、に移動すると、URLによってにリダイレクトされhttp://test.domain.com/subdomains/test/ます。/subdomains/test/最後にを表示せずに可能ですか?
Erik Djupvik 2012年

2
その場合、mod_proxyの使用を検討しP、に加えてフラグを指定する必要があると思いますL
アンサリ2012年

1
いいえ、http://test.domain.com/subdomains/test/表示したいだけの場合は、にリダイレクトされますhttp://test.domain.com/
Erik Djupvik 2012年

1
それがどのようにリダイレクトされるのかわかりませんtest.domain.com/subdomains/test-おそらくここで何か他のことが起こっています。RewriteBase /直後に追加できますRewriteEngine onか?また、表示を維持したい場合は、test.domain.commod_proxyと[P]フラグを使用する必要があります。
アンサリ2012年

1
私はここで@anubhavaの答えを使用してそれを機能させることができました: stackoverflow.com/a/22395008/128984
Micah

50

私はmod_rewriteの専門家ではないので、苦労することがよくありますが、私のサイトの1つでこれを行ったので、状況によっては他のフラグなどが必要になる場合があります。私はこれを使用しています:

RewriteEngine on

RewriteCond %{HTTP_HOST} ^subdomain\.example\.com$
RewriteCond %{REQUEST_URI} !^/subdomains/subdomain
RewriteRule ^(.*)$ /subdomains/subdomain/$1 [L] 

サイトの残りの部分のその他の書き換えルールは、サブドメインの書き換えに干渉しないように、後で実行する必要があります。


私はそう言うでしょう。この設定は、ここでの私の答えと同じように正しい設定であることがわかりまし
チェタバハナ2015年

5
参考までに、.htaccess(私がやったように)最初の誰かがこのページに来た場合、実際の.htaccessファイルを作成する以外に、それを有効にするにAllowOverrideは、VirtualHost設定を設定する必要があります(stackoverflow.com/a/22819550/1657502) 、Apacheの有効化rewriteモジュールをして、Apacheの(再起動stackoverflow.com/a/5758551/1657502
アントニオ・ヴィニシウスメネゼスMedei

wwwを使用してサブドメインにアクセスする場合、これは機能しません。@Minhソリューションはすべての場合に機能します。
RohanKhude19年

@ RohanKhude、www.example.comとexample.comで異なるコンテンツを提供したいのですか?通常、SEOの場合、www.example.comでexample.comへの永続的なリダイレクトを発行するか、またはその逆を行う必要があるためです。
LeeKowalkowski19年

1
サブドメインのサブドメインとしての@RohanKhudewwwも、DNSレベルで機能するために必要なものですよね。任意のサブドメインで機能するというあなたの期待は間違っていると思います。Minhの答え(stackoverflow.com/a/41389905/30945)は、.htaccess構成が1つだけのサブドメインをサポートしていることを前提としているため、その点では堅牢性が低くなります。私のソリューションは必要な数のサブドメインをサポートしていますが、サポートされているすべてのサブドメインを明示的に定義する必要がありますが、オプションのwww.プレフィックスは、おそらく書き換えよりもリダイレクトを介してサポートするのが最適です。
LeeKowalkowski19年

16

.htaccessで次のルールを使用して、サブドメインをサブフォルダーに書き換えることができます。

RewriteEngine On

 # If the host is "sub.domain.com"
 RewriteCond %{HTTP_HOST} ^sub.domain.com$ [NC]
 # Then rewrite any request to /folder
 RewriteRule ^((?!folder).*)$ /folder/$1 [NC,L]

行ごとの説明:

  RewriteEngine on

上記の行は、URLを書き換えるためにエンジンをオンにするようにサーバーに指示しています。

  RewriteCond %{HTTP_HOST} ^sub.domain.com$ [NC]

この行は、正規表現パターンを使用してHTTPホストと照合するRewriteRuleの条件です。条件は、ホストがsub.domain.comの場合、ルールを実行することを示しています。

 RewriteRule ^((?!folder).*)$ /folder/$1 [NC,L]

ルールはhttp://sub.domain.com/fooと一致し、内部的にhttp://sub.domain.com/folder/fooにリダイレクトされます。

sub.domain.comをサブドメインに置き換え、フォルダーをサブドメインを指すフォルダーの名前に置き換えます。


1
これは私にとって正解です-私がここにたどり着いた方法の説明は次のとおりです。メインサイトのTLDにSSLをインストールしたときに明らかに壊れた、サブドメインリダイレクトに関する古くからの問題を探してここに到着しました。リダイレクトは当初、メインサイトのTLDを引き続き使用しようとしており、セキュリティルールに違反していました。私が必要としていたのは、サブドメイン(完全に異なるTLD上にあった)を同じホスト上にあるがメインサイトから離しておくことでした。上記のように書き換えルールを追加すると、メインTLDサイトでホストされているフォルダーに完全なサブドメインを転送できました。
リチャードバウン2017

8

私は同じ問題を抱えていました、そしてhttp://www.webmasterworld.com/apache/3163397.htmで詳細な説明を見つけました

私の解決策(サブドメインの内容は次のフォルダーにあるはずですsd_subdomain

Options +FollowSymLinks -MultiViews

RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} subdomain\.domain\.com
RewriteCond $1 !^sd_
RewriteRule (.*) /sd_subdomain/$1 [L]

1
それは私には機能しません、ドメインのDNSゾーンで何かを構成する必要がありますか?
totoaussi 2015年

1
@totoaussi同じサーバーを指す*サブドメインごとにAレコードまたはAレコードを作成する必要があります。
Pablo Torrecilla 2015年

4

これにより、同じフォルダのサブドメインにリダイレクトされます。

.httaccess

RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} ^([^\.]+)\.domain\.com$ [NC]
RewriteRule ^(.*)$ http://domain\.com/subdomains/%1

3

この.htaccessファイルをサブドメインフォルダに置いてみてください。

RewriteEngine On

RewriteRule ^(.*)?$ ./subdomains/sub/$1

http://sub.domain.com/のみを表示したい場合は、http://domain.com/subdomains/sub/にリダイレクトされます


この質問は2012年に行われ、8つの回答があります。あなたの答えはこの時点で付加価値がありますか?
ppovoski 2016

このソリューションは、wwwを使用してサブドメインにアクセスした場合でも機能します
RohanKhude19年

2

サブドメインディレクトリをリダイレクトします。

RewriteCond %{HTTP_HOST} ^([^.]+)\.(archive\.example\.com)$ [NC]
RewriteRule ^ http://%2/%1%{REQUEST_URI} [L,R=301]

0

サブドメインリクエストの場合は、次を使用します。

RewriteEngine on 
RewriteCond %{HTTP_HOST} !^www\.band\.s\.co 
RewriteCond %{HTTP_HOST} ^(.*)\.band\.s\.co 
RewriteCond %{REQUEST_URI} !^/([a-zA-Z0-9-z\-]+) 
RewriteRule ^(.*)$ /%1/$1 [L] 

必要なサブドメイン名と同じフォルダを作成するだけです。:フォルダは、このようなが存在でなければなりませんdomain.com/subためsub.domain.com


これは私にとってはうまくいきますが、ファイルを保持しません。たとえば、sub.domain.com / index.php throw 404
Paolo Falomo 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.