
以前、cpanel でサブドメインを設定していました (sub.domain.com から domain.com/sub/ にリダイレクト)。しかし、今日突然、ブラウザの URL が sub.domain.com のままではなく、www.domain.com/sub/ に書き換えられていることに気付きました。何が問題なのかわからなかったのですが、サブドメインを削除して 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
答え1
元のコードのロジックを微調整したところ、実行可能なソリューションが見つかったようです。これまでに行ったテストはすべて成功しています。コードに欠陥があると思われる方、または元の質問で提示された条件に合わせてコードを最適化する方法があると思われる方は、ぜひご意見をお寄せください。私は書き換えの経験がほとんどありません。ありがとうございます。
動作コード:
# 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 がライブ フォルダーにリダイレクトされない理由はわかりません。 思ったとおりに動作しますが、理由がわかりません ^_^;