2012-08-31 81 views
0

我想確保如果HTTPS在安全子域之外使用,它將被重定向到HTTP。htaccess重寫規則中的錯誤

這是我的根.htaccess文件:

# Redirect HTTPS requests for non-SSL pages back to HTTP. (Note that shared objects 
# such as images are excluded from this rule) 

RewriteCond %{HTTPS} =on 

# my.EXAMPLE.com is the secure subdirectory. 
RewriteCond %{HTTP_HOST} !^my.EXAMPLE.com [NC] 

RewriteCond $1 !\.(gif|jpe?g|png|ico|css|js)$ 
RewriteRule ^(.*)$ http://www.EXAMPLE.com/$1 [R=301] 

簡而言之:

if HTTPS 
if not in my.example.com 
if NOT an image/css/js file 
redirect to HTTP 

但預期這是行不通的,而不是如果我嘗試外部訪問頁面通過HTTPS my.example.com子目錄的我得到一個404 Not Found錯誤。通過HTTP訪問相同的頁面沒有問題,它工作正常。

任何想法爲什麼這個規則可能不工作?

編輯

這裏就是整個.htaccess文件:

# Don't display .htacess files in directory listings. 
IndexIgnore .htaccess 
Options +FollowSymLinks 
RewriteEngine on 

# Password protected for now 
AuthType Basic 
AuthName "EXAMPLE" 
AuthUserFile "/home/EXAMPLE/.htpasswds/public_html/passwd" 
require valid-user 

# Redirect HTTPS requests for non-SSL pages back to HTTP. (Note that shared objects 
# such as images on both HTTP and HTTPS pages are excluded from this rule) 
RewriteCond %{HTTPS} on 
RewriteCond %{HTTP_HOST} !^my\.EXAMPLE\.com$ [NC] 
RewriteCond %{REQUEST_FILENAME} !\.(gif|jpe?g|png|ico|css|js)$ 
RewriteRule ^(.*)$ http://www.EXAMPLE.com/$1 [R=301] 


# Redirect non-www requests to www 
RewriteCond %{HTTP_HOST} ^EXAMPLE.com$ 
RewriteCond %{HTTP_HOST} !^my\.EXAMPLE\.com [NC] 
RewriteRule ^(.*)$ "http\:\/\/www\.EXAMPLE\.com\/$1" [R=301] 

# Prevent direct access to the WHMCS folder must be accessed through secure subdomain 
RedirectMatch 301 ^/WHMCS/(.*)$ https://my.EXAMPLE.com/$1 


ErrorDocument 404 /404.php 
+0

你對htaccess文件有其他規則嗎? –

+0

我會更新我的問題,幷包括整個htaccess文件 –

+0

你打算給你的網址是404還是一切都會給你404? –

回答

0

試試這個:

RewriteCond %{HTTPS} on 
RewriteCond %{HTTP_HOST} !^my\.EXAMPLE\.com$ [NC] 
RewriteCond %{REQUEST_FILENAME} !\.(gif|jpe?g|png|ico|css|js)$ 
RewriteRule ^(.*)$ http://www.EXAMPLE.com/$1 [R=301] 
+0

它仍然給了我一個404錯誤,即使刪除其他重寫規則,只是離開這一個。 –

+0

您的my.example.com和www.EXAMPLE.com指向同一位置嗎?和你的瀏覽器中的鏈接是否從我更改爲www? – Oussama

+0

www.example.com轉到服務器上的根文件夾,'my'子域實際上指向一個子文件夾。 –

0

的問題是,如果你沒有一個SSL虛擬主機設置爲www.example.com,並將它的文檔根指向www.example.com的非SSL虛擬主機所在的位置,當有人訪問https://www.example.com/時,您的htaccess文件從不讀取。我敢打賭,您需要將HTTPS-> HTTP規則放入您的SSL虛擬主機的htaccess文件中(其中my.example.com的文檔根目錄是)。

你有什麼似乎是:

http://www.example.com/ -> /home/EXAMPLE/ (or whatever your document root is) 

https://my.example.com/ -> /home/EXAMPLE/subfolder/ 

因此,沒有一個虛擬主機設置爲https://www.example.com,在/home/EXAMPLE/ htaccess的文件從來沒有當你去到SSL example.com訪問。

+0

我必須在cPanel/WHM中查看我可以在其中找到的內容,或許可以更改虛擬主機,但不確定。 一旦我有時間檢查它,我會讓你知道它是否工作。 –