
我之前在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 檔案。我最初對其進行了調整,以嘗試完成以下任務:
我有三個資料夾:live、staging 和 dev:
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 重新導向到活動資料夾。它按照我想要的方式工作,只是不知道為什麼^_^;