close

現場(環境):CetnOS 7.0 套件:apache (rewrite)

 


問題:

 

想要用virtualhost設定服務,

 

並且有將 IP連線強制導向網址 && 將所有連線導向https的需求。

 


處理方式:

 

從新版的Apache開始,

 

就已經將virtualhost這部份的移到conf.d去做處理了。

 

除了它之外,當然還有更多設定檔都已經被劃分出去。

 

將他變成模組化的設定方式。

 

主要就是讓所有的使用者不要再去修改httpd.conf這檔案了。

 

關於VirtualHost的部份。設定如下所示。


#vim /etc/http/conf.d/vhost.conf

 

NameVirtualHost *:80

 

<Directory "/home/prog/dm">


Options FollowSymLinks


AllowOverride All


Require all granted


</Directory>

 

<VirtualHost *:80>


ServerName www.dm.com


// 假設網域是www.dm.com


DocumentRoot /home/prog/dm


ErrorLog "|/usr/sbin/rotatelogs -l /home/prog/log/dm_error-%Y%m%d.log 86400"


CustomLog "|/usr/sbin/rotatelogs -l /home/prog/log/dm_access-%Y%m%d.log 86400" combined


</VirtualHost>

 

到這邊就算完成vhost.conf的設定檔。

 



設定轉址的部份。我們一樣可以在vhost裏面完成

 

<Directory "/home/prog/dm">


Options FollowSymLinks


AllowOverride All


Require all granted


RewriteEngine on


//假設網域是www.dm.com


RewriteCond %{HTTP_HOST} !^www\.dm\.com


RewriteRule ^(.*)$ http://www.dm.com/$1 [R=301,L]


RewriteCond %{HTTPS} !on


RewriteRule ^(.*)$ https://www.dm.com/$1 [R=301,L]


</Directory>

 

這邊首要就是先將轉址功能啟動。

RewriteEngine on

 

再來就是設定條件,

RewriteCond 表示條件,RewriteRule表示為要執行什麼事情。

 

RewriteCond %{HTTP_HOST} !^www\.dm\.com

 

這一筆的意思是說如果,

 

使用者在瀏覽器上的網址列輸入非www\.dm\.com這個網址。

 

我們就將其引導到www\.dm\.com這個網址去。

 

RewriteRule ^(.*)$ http://www.dm.com/$1 [R=301,L]

 

再來的下一個條件,

 

因為我們的網站有加SSL憑證,

 

所以只要再網址那邊輸入非https然後是連到這台主機的。

 

RewriteCond %{HTTPS} !on

 

我全部都要幫他導向https://www.dm.com/

 

RewriteRule ^(.*)$ https://www.dm.com/$1 [R=301,L]

 

 


再來是小攻城師的戰場筆記有分享到一些好用的使用方法。

 

這邊是因為他有部份網站沒有要導到SSL下,

 

所以要在導入過去的ssl.conf那邊再做設定。

 

RewriteCond %{REQUEST_URI} ^.*/user_functions/.*$ [NC]

RewriteRule ".?" "-" [S=4]

 

S=X ; S表示為跳過多少下方的RewriteCond條件。

 

所以S=4表示為跳過下列四筆。

 

 

RewriteCond %{REQUEST_URI} \.js|\.css|\.(jpg|jpeg)|\.gif|\.png [NC]

RewriteRule
".?" "-" [S=3]

 

這邊的條件是用到網址的最後副檔名。

 

只要是這些(.js,.css … .png)結尾的網址,一樣不受下方規侷限制。

 

RewriteCond %{SERVER_PORT} ^443$ [OR]

RewriteCond %{HTTPS} on

RewriteCond %{REQUEST_URI} ^.*(?!\/reward\/).*$|(?!\.js)|(?!\.css) [NC]

RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [L,R]

RewriteRule ^(.*)$ http://www.test.tw/$1 [R=301,L]

 

因為他要把部份不要導到https的網頁導回來。

 

%{HTTP_HOST} !^$ -使用者再瀏覽器請求的動作不是空值
 

[NC] - 表示不區分大小寫

 

[OR] -當作 AND 來看

 

[L] 表示這是最後一條改寫指令,

當符合者到這邊就停止。不再之後的規則比較。

 

[R=301] 網頁伺服器傳回一個301狀態碼給瀏覽器

 

也就是我們說的301轉址。

 

詳細的方法可以參考他的寫法,我覺得很實用。

 

相關網址付在參考頁面。

 

參考網頁:

http://fannys23.pixnet.net/blog/post/42991285-%5Bapache%5D-%E8%A8%AD%E5%AE%9A%E7%89%B9%E5%AE%9A%E7%B6%B2%E9%A0%81%E8%BD%89%E5%9D%80%E5%88%B0https%EF%BC%8C%E5%85%B6%E4%BB%96%E7%B6%B2%E9%A0%81%E5%9D%87

 

<本篇完>

arrow
arrow
    全站熱搜

    IT001 發表在 痞客邦 留言(0) 人氣()