[Apache] 使用者只能使用 https 進入 mod_rewrite force ssl 進階設定

最近館內機器我想全部使用上ssl機制會比較安全,之前剛來到 國史館台灣文獻館 的時候,有研究助理對我不爽,說什麼我開發的薪資管理系統,沒有ssl機制,會出現漏洞,囧導至系統目前只有我在用,哈哈,不過這不是重點重點是接下來的介紹啦 首先要看看你的機器是否有支援 mod_ssl 目前我用的機器是 CentOS 4.4 所以指令如果有所改變,請自行debug

cat /etc/httpd/conf/httpd.conf | grep rewrite LoadModule rewrite_module modules/mod_rewrite.so 這樣代表有支援了,那如果沒有支援呢,請用下面指令來新增

yum install mod_ssl

主機有支援了以後,想必大家一定想要讓使用者全部都改成ssl來連接主機,可是使用者已經把網站都加入我的最愛了,那要怎麼不改變使用者之下,只改變主機端呢?這就利用 mod_rewrite 囉 其實這個也不是只有一個方法,我先用 php 的方式:

當然上面是利用 php的 $_SERVER 變數來做到的,這個也是一個方法,如果對 rewrite 的 技術還不是很熟的話,可以用上面的方法,當然底下就是 rewrite的作法了 設定 httpd.conf RewriteEngine On ##設定虛擬主機所對應的目錄 Options Indexes FollowSymLinks AllowOverride All Order allow,deny Allow from all 首先在你的網站根目錄底下新增或編輯 .htpasswd ,如果沒有此檔請新增,然後加入下面語法 RewriteEngine On RewriteCond %{SERVER\_PORT} !443 RewriteCond %{REMOTE\_ADDR} ^192\.168 RewriteRule ^(.\*)$ https://192.168.100.244/dar/$1 [L] RewriteCond %{SERVER\_PORT} 80 RewriteCond %{REMOTE\_ADDR} !^192\.168 RewriteRule ^(.\*)$ https://nas.th.gov.tw/dar/$1 [L] 上面是我的設定,目前我們館內這套系統對外不開放,所以我把ip切割成館內跟館外,挨 因為我們這裡的網管 routing table 不知道怎麼弄的,只要用外部網址去連館內伺服器 就會發生封包繞出去在繞進來現象,所以我才做了此設定,只要是在 192.168.\*.\* 底下的使用者,連進來系統都會轉到 https://192.168.100.244 ,如果是在外面的人,就直接轉到正確網址,這樣才對 上面的 RewriteCond %{SERVER\_PORT} !443 改成 RewriteCond %{SERVER\_PORT} 80 這樣也是可以 參考:

Apache Module mod_rewrite 相關: [Apache] mod_rewrite 實做 防盜圖 為什麼要使用 mod_rewrite?