web-dev-qa-db-ja.com

サブドメインは、その前にwwwがないと機能しません

以前にcpanelでサブドメインを設定していましたが(sub.domain.comはdomain.com/sub/にリダイレクトします)、今日突然、ブラウザのURLが単なるではなくwww.domain.com/sub/に書き換えられていることに気付きました。 sub.domain.comのままにしておきます。問題が何であるかはわかりませんでしたが、サブドメインを削除してcpanelで再作成することにしました。これで、www.sub.domain.comにアクセスすることによってのみアクセスできます(sub.domain.comではサーバーが見つかりませんというエラーが発生します)。

編集:問題は.htaccessファイルにあるようです。それを削除した後、物事は通常に戻りました。しかし今、私の新しい問題は、.htaccessファイルを正しく構成する方法です。私はもともとそれを微調整して、以下を達成しようとしました:

ライブ、ステージング、開発の3つのフォルダがあります。

1)domain.comまたはwww.domain.comのリクエストは、domain.com/liveに送信されます(ユーザーに表示されるURLは常にwww.domain.comとして書き換えられます)。

2)staging.domain.comおよびdev.domain.comのリクエスト、またはそれぞれdomain.com/stagingおよびdomain.com/devに送信され、ユーザーにはブラウザにstaging.domain.comまたはdev.domain.comが表示されます。 。

3)cpanelにサブドメインを追加しても、一般的にサブドメインはブラウザによって書き換えられません。

私の現在の.htaccessファイルは1番を問題なく達成していますが、staging.domain.comをwww.domain.com/stagingなどに書き換えています。

RewriteCond %{HTTP_Host} !^www\.domain\.com$
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]
RewriteRule ^$ /index.html

RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\..+$
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://www.domain.com/$1/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/live/
RewriteRule ^(.*)$ /live/$1
3
Choy

元のコードのロジックを微調整しましたが、実行可能な解決策があるようです。私が行ったすべてのテストは成功しました。コードに欠陥がある場合、または元の質問で提示された条件に合うようにコードを最適化する方法を見つけた場合は、チャイムを鳴らしてください。書き換えの経験はほとんどありません。ありがとう。

作業コード:

# REDIRECTS
#
# Add www in front of all URLs except subdomains
#
RewriteCond %{HTTP_Host} ^domain\.com$
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]
RewriteRule ^$ /index.html
#
# Add forward slash at end of www URLs
#
RewriteBase /
RewriteCond %{HTTP_Host} ^www\.domain\.com$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\..+$
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://www.domain.com/$1/ [R=301,L]
#
# Forward requests to live folder
#
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/live/
RewriteRule ^(.*)$ /live/$1

*注:コードの最後の部分がサブドメインのURLをライブフォルダーにリダイレクトしない理由がわかりません。それは私が望むように機能しますが、理由はわかりません^ _ ^;

0
Choy