2008-11-03 64 views
1

我想迫使阿帕奇以下形式使用HTTPS對特定網址:的.htaccess需要SSL特定URL

https://www.example.com/signup/* 

所以

如果有人去任何下面的示例網址直接,Apache會將URL轉發到HTTPS對等網站。

例如

http://www.example.com/signup --> https://www.example.com/signup 
http://www.example.com/signup/basic+plan --> https://www.example.com/signup/basic+plan 
http://www.example.com/signup/premium --> https://www.example.com/signup/premium 

任何人都知道如何?

在此先感謝

回答

2

可以使用Redirect指令:

Redirect 301 /signup https://www.example.com/signup 

這將自動保存任何東西下面的網址/註冊。請務必僅在您的非SSL網站上配置此指令,否則它可能會進入遞歸循環!

+0

當我使用您的代碼示例,然後在Firefox中並轉到http://example.com/signup以測試其是否重定向到https時,我收到以下Firefox錯誤:「Firefox已檢測到服務器正在以一種永遠不會完成的方式重定向這個地址的請求。「 – 2008-11-03 03:51:13

+0

您可能已將Redirect指令添加到SSL和非SSL網站。您需要將它*僅*添加到非SSL網站。 – 2008-11-03 03:57:58

0

你可以用mod_rewrite的做到這一點 - !

的RewriteCond%{SERVER_PORT}^$ 443

重寫規則^ /註冊https://example.com/signup

重寫規則^ /註冊/(.*)$ https://example.com/signup/ $ 1

應該工作,但我沒有測試過。

- 編輯 -

修正,我只是想這對我的一個服務器,它爲我工作得很好。你可能想要重新檢查你的mod_rewrite配置。另外,如果您使用.htaccess,則需要確保該目錄允許覆蓋。

作爲一個提示,假設您的SSL流量通過端口443傳遞。如果不是,則需要相應地調整重寫條件。

4

我認爲這是我用什麼:

RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteCond %{REQUEST_URI} ^/somefolder/? 
RewriteRule ^(.*)$ https://www.domain.com/somefolder/$1 [R,L] 

(從here

+0

Murat 當我嘗試使用您的代碼並測試http://example.com/somefolder時,它將重定向到https://example.com/somefolder/somefolder(注意到url中的雙「somefolder」) – 2008-11-03 05:28:09

5

謝謝穆拉特,

此致差不多的工作,但知道如何得到它的工作完全。

以下是什麼在起作用:

RewriteCond %{SERVER_PORT} 80 
RewriteCond %{REQUEST_URI} ^/somefolder/? 
RewriteRule ^(.*)$ https://www.domain.com/$1 [R,L] 

請注意,我並沒有包括在www.domain somefolder。COM重寫規則

1

我用下面需要一個網站的結帳部分要求SSL:

<Directory "/var/www/html"> 
     RewriteEngine on 
     Options +FollowSymLinks 
     Order allow,deny 
     Allow from all 
     RewriteCond %{SERVER_PORT} !^443$ 
     RewriteRule \.(gif|jpg|jpeg|jpe|png|css|js)$ - [S=1] 
     RewriteRule ^checkout(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R] 
</Directory> 

因此,例如,打http://www.example.com/checkout重定向到https://www.example.com/checkout

規則將跳過的文件擴展名是通常包含在一個頁面內,以免混合內容警告。您應該根據需要添加到此列表中。

如果你想多頁改變重寫規則的東西,如:

RewriteRule ^(checkout|login)(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R] 

當然,這個目錄應該與服務器上的實際路徑。此頁面還可能有助於您的特定需求的一些更多信息:http://www.whoopis.com/howtos/apache-rewrite.html

我在運行Plesk 8.6的網站上使用此功能,但這應該不重要。這是在我的vhost.conf文件中,就像把它放在你的httpd.conf文件中一樣。我不確定是否需要調整任何內容以在.htaccess文件中使用它,但我對此表示懷疑。如果添加到conf文件中,不要忘記重新啓動apache來重新加載配置。

如果你像我一樣,只想在特定的頁面上使用SSL,那麼你還需要一個重寫規則,將規則發回給普通的http。您可以使用以下爲相反的效果:

RewriteCond %{SERVER_PORT} ^443$ 
RewriteRule \.(gif|jpg|jpeg|jpe|png|css|js)$ - [S=1] 
RewriteRule !^(checkout|login)(.*)$ http://%{SERVER_NAME}%{REQUEST_URI} [L,R] 

如果您使用的Plesk像我記住所有非SSL流量使用vhost.conf文件,但所有的SSL流量使用vhost_ssl.conf文件。這意味着您的第一個要求SSL的重寫規則將存放在vhost.conf文件中,但第二個強制回到非SSL的規則必須存放在vhost_ssl文件中。如果你使用的是httpd.conf或.htaccess,我認爲你可以把它們放在同一個地方。

我也在我的博客上發佈了這個教程:Apache rewrite rules to force secure/non-secure pages