2014-07-06 42 views
0

我剛剛添加了以下規則來強制HTTPS在我的付款頁面上,只是因爲我不知道如何強制HTTPS只在domain.com而不是user1.domain.com - 不太確定如何做到這一點,或者即使有可能。htaccess - 如何強制HTTPS只是我的主域名,而不是子域

RewriteCond %{HTTPS} off 
RewriteCond %{REQUEST_URI} /join/payment 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L] 

所以我補充說,規則和它的正常工作,但是,它可能只是強制HTTPS在我的完整域名,而不是我的任何的子域?

我的全htaccess文件

RewriteEngine on 
RewriteCond $1 !^(index\.php|images|js|profile_pictures|fonts|stylesheets|robots\.txt) 

RewriteCond %{HTTPS} off 
RewriteCond %{REQUEST_URI} /join/payment 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php/$1 [L,QSA] 

RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] 
RewriteRule^https://%1%{REQUEST_URI} [NE,R=301,L] 

RewriteCond %{HTTP_HOST} !^((www\.)?)domain\.com [NC] 
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com 
RewriteRule ^(.*)$ http://domain.com/site/%1$1 [L,NC,P] 

RewriteCond %{HTTP_HOST} !^domain\.com$ [NC] 
RewriteRule ^((?!site/).*)$ http://domain.com/site/$1?host=%{HTTP_HOST}&page=%{REQUEST_URI} [L,NC,P] 

問題

是否有可能只是強制HTTPS上domain.com而不是子域?如果可以在子域上強制使用HTTP而不是HTTPS,我很想聽聽如何做到這一點。

+0

在重定向到HTTPS之前,只需添加另一個'RewriteCond'來檢查主機名稱 - 類似於您已經進一步重新定向到'domain.com'。 (順便說一句,後者會將任何不是'www'的子域重定向到基本域,所以你實際上不能擁有那麼多其他子域?) – CBroe

+0

所有的子域都是動態的,所以有超過100個子域。看起來,當我只在我的域上強制使用HTTPS時,它解開了子域。 – user2983512

+0

你能解釋最後2條規則是用'P'標誌做什麼的 – anubhava

回答

0

我認爲這應該工作:

RewriteCond %{HTTPS} off 
RewriteCond %{REQUEST_URI} /join/payment 
RewriteCond %{HTTP_HOST} !^((www\.)?)domain\.com [NC] 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L] 

也就是說,添加一個條件,以檢查HTTP_HOST是www.domain.comdomain.com在它前面加https://之前。

+0

這種作品,雖然當我輸入時說'www.user1customdomain.com'被屏蔽,因爲HOST實際上是我的域名,它添加了HTTPS和然後顯示「該網站的身份未被驗證。」有沒有辦法解決?除此之外,如果我訪問「mydomain.com」,它不會添加HTTPS,因爲沒有www。 (這是我已經刪除)。 – user2983512

+0

該解決方案應該可以在我們沒有'www.'的情況下工作,這在用於重寫條件的正則表達式中是可選的。 'www.user1customdomain.com'是一個完全不同的域,根本不應該匹配正則表達式,從而跳過重寫。 – Diego

相關問題