Apache

Linx主機apache通過.htaccess設置拒絕IP

0 發布于2013-01-15 閱讀: 2,325 次
今天某人在我的網站上惡意下了兩個騷擾訂單,我在第一時間發現后,在.htaccess文件里設置拒絕了他的IP地址! 具體設置方法如下,記錄在此,希望以后備用!
Order Allow,Deny Allow from all Deny from 127.0.0.1 允許所有,禁止 XXX,請將里面的IP改成你要封殺的IP地址。 并另存為.htaccess,上傳到網站根目錄,部分程序會有這個文件,直接添加到里面即可。 附錄:使用詳解 Allow和Deny可以用于apache的conf文件或者.htaccess文件中(配合Directory, Location, Files等),用來控制目錄和文件的訪問授權。order,顧名思義是順序的意思,所以order命令可以決定deny和allow起作用的順序,通俗的說就是誰排在最后那么誰就有最終的決定權。 order deny,allow和order allow,deny的區別也就顯而易見了,前者的意思是先檢查是否有deny命令,不論有沒有都會再繼續檢查是否有allow規則,如果有,allow規則的內容可以覆蓋掉deny規則。例如, Order Allow,Deny Allow from ip1 Deny from all 本意是想禁止ip1的訪問,而允許其他所有ip訪問,但顯然用反了順序,按照誰在后誰最大的原則,deny是掌握大權的人,所以deny from all就將allow的命令否決了。正確的寫法應該是: Order Deny,Allow //先檢查Deny,并由Allow拍板 Deny from all       //Deny命令要求禁止所有ip的訪問 Allow from ip1     //Allow說只允許ip1訪問 結果:只允許ip1訪問網站,禁止其他所有ip的訪問。 按照這個原則,還有如下應用。 <strong>禁止特定ip的訪問</strong> <pre>&lt;Files 403.shtml&gt; order allow,deny allow from all &lt;/Files&gt; deny from 1.1.1.1 ;寫要封的IP</pre> <strong>禁止部分ip,其他的全部開放的兩種寫法</strong> Order Deny,Allow Deny from ip1 ip2 或者 Order Allow,Deny Allow from all Deny from ip1 ip2

Apache Rewrite 規則詳解

0 發布于2012-07-20 閱讀: 2,017 次
1、Rewrite規則簡介:   Rewirte主要的功能就是實現URL的跳轉,它的正則表達式是基于Perl語言。可基于服務器級的 (httpd.conf)和目錄級的(.htaccess) 兩種方式。如果要想用到rewrite模塊,必須先安裝或加 rewrite模塊。方法有兩種一種是編譯apache的時候就直接安裝rewrite模塊,另一種是編譯 apache時以DSO模式安裝apache,然后再利用源碼和apxs來安裝rewrite模塊。基于服務器級 的(httpd.conf)有兩種方法,一種是在httpd.conf的全局下直接利用RewriteEngine on來打 rewrite功能;另一種是在局部里利用RewriteEngine on來打開rewrite功能,下面將會舉例說 明,需要注意的是,必須在每個virtualhost里用RewriteEngine on來打開rewrite功能。否則 virtualhost里沒有RewriteEngine on它里面的規則也不會生效。 基于目錄級的(.htaccess),要注意一點那就是必須打開此目錄的FollowSymLinks屬性且在 .htaccess里要聲明RewriteEngine on。 2、舉例說明: 下面是在一個虛擬主機里定義的規則。功能是把client請求的主機前綴不是www.colorme.com 和203.81.23.202都跳轉到主機前綴為http://www.colorme.com.cn,避免當用戶在地址欄 寫入http://colorme.com.cn時不能以會員方式登錄網站。 NameVirtualHost 192.168.100.8:80 ServerAdmin [email protected] DocumentRoot "/web/webapp" ServerName www.colorme.com.cn ServerName colorme.com.cn   RewriteEngine on #打開rewirte功能   #聲明Client請求的主機中前綴不是www.colorme.com.cn,[NC]的意思是忽略大小寫 RewriteCond %{HTTP_HOST} !^www.colorme.com.cn [NC]   #聲明Client請求的主機中前綴不是203.81.23.202,[NC]的意思是忽略大小寫 RewriteCond %{HTTP_HOST} !^203.81.23.202 [NC]    #聲明Client請求的主機中前綴不為空,[NC]的意思是忽略大小寫 RewriteCond %{HTTP_HOST} !^$   #含義是如果Client請求的主機中的前綴符合上述條件,則直接進行跳轉到 #http://www.colorme.com.cn/,[L]意味著立即停止重 #寫操作,并不再應用其他重寫規則。這里的.*是指匹配所有URL中不包含換行字符,()括號的功 #能是把所有的字符做一個標記,以便于后面的應用.就是引用前面里的(.*)字符。 RewriteRule ^/(.*) http://www.colorme.com.cn/ [L]     例二.將輸入 folio.test.com 的域名時跳轉到profile.test.com listen 8080 NameVirtualHost 10.122.89.106:8080 ServerAdmin [email protected] DocumentRoot "/usr/local/www/apache22/data1/" ServerName profile.test.com RewriteEngine on RewriteCond %{HTTP_HOST} ^folio.test.com [NC] RewriteRule ^/(.*) http://profile.test.com/ [L]   3.Apache mod_rewrite規則重寫的標志一覽 1) R[=code](force redirect) 強制外部重定向 強制在替代字符串加上 http://thishost[:thisport]/前綴重定向到外部的URL.如果code不指定,將用缺省 的302 HTTP狀態碼。 2) F(force URL to be forbidden)禁用URL,返回403HTTP狀態碼。 3) G(force URL to be gone) 強制URL為GONE,返回410HTTP狀態碼。 4) P(force proxy) 強制使用代理轉發。 5) L(last rule) 表明當前規則是最后一條規則,停止分析以后規則的重寫。 6) N(next round) 重新從第一條規則開始運行重寫過程。 7) C(chained with next rule) 與下一條規則關聯 如果規則匹配則正常處理,該 標志無效,如果不匹配,那么下面所有關聯的規則都跳過。 8) T=MIME-type(force MIME type) 強制MIME類型 9) NS (used only if no internal sub-request) 只用于不是內部子請求 10) NC(no case) 不區分大小寫 11) QSA(query string append) 追加請求字符串 12) NE(no URI escaping of output) 不在輸出轉義特殊字符例如: RewriteRule /foo/(.*) /bar?arg=P1/%3d$1 [R,NE] 將能正確的將/foo/zoo轉換成/bar?arg=P1=zed 13) PT(pass through to next handler) 傳遞給下一個處理例如: RewriteRule ^/abc(.*) /def$1 [PT] # 將會交給/def規則處理 Alias /def /ghi 14) S=num(skip next rule(s)) 跳過num條規則 15) E=VAR:VAL(set environment variable) 設置環境變量   4.Apache rewrite例子集合 在 httpd 中將一個域名轉發到另一個域名虛擬主機世界近期更 換了域名,新域名為 www.wbhw.com, 更加簡短好記。這時需要將原來的域名 webhosting-world.com, 以及論壇所在地址 webhosting-world.com/forums/定向到新的 域名,以便用戶可以找到,并且使原來的論壇 URL 繼續有效而不出現 404 未找到,比如原 來的http://www.webhosting-world.com/forums/-f60.html, 讓它在新的域名下繼續有 效,點擊后轉發到http://bbs.wbhw.com/-f60.html, 這就需要用 apache 的 Mod_rewrite 功能來實現。在中添加下面的重定向規則:   RewriteEngine On # Redirect webhosting-world.com/forums to bbs.wbhw.com RewriteCond %{REQUEST_URI} ^/forums/ RewriteRule /forums/(.*) http://bbs.wbhw.com/$1 [R=permanent,L] # Redirect webhosting-world.com to wbhw.com RewriteCond %{REQUEST_URI} !^/forums/ RewriteRule /(.*) http://www.wbhw.com/$1 [R=permanent,L]   添加了上面的規則以后, 里的全部內容如下:   ServerAlias webhosting-world.com ServerAdmin [email protected] DocumentRoot /path/to/webhosting-world/root ServerName www.webhosting-world.com RewriteEngine On # Redirect webhosting-world.com/forums to bbs.wbhw.com RewriteCond %{REQUEST_URI} ^/forums/ RewriteRule /forums/(.*) http://bbs.wbhw.com/$1 [R=permanent,L] # Redirect webhosting-world.com to wbhw.com RewriteCond %{REQUEST_URI} !^/forums/ RewriteRule /(.*) http://www.wbhw.com/$1 [R=permanent,L]   URL重定向 例子一: 1.http://www.zzz.com/xxx.php-> http://www.zzz.com/xxx/ 2.http://yyy.zzz.com-> http://www.zzz.com/user.php?username=yyy 的功能 RewriteEngine On RewriteCond %{HTTP_HOST} ^www.zzz.com RewriteCond %{REQUEST_URI} !^user/.php$ RewriteCond %{REQUEST_URI} /.php$ RewriteRule (.*)/.php$ http://www.zzz.com/$1/ [R] RewriteCond %{HTTP_HOST} !^www.zzz.com RewriteRule ^(.+) %{HTTP_HOST} [C] RewriteRule ^([^/.]+)/.zzz/.com http://www.zzz.com/user.php?username=$1   例子二: /type.php?typeid=* --> /type*.html /type.php?typeid=*&page=* --> /type*page*.html   RewriteRule ^/type([0-9]+).html$ /type.php?typeid=$1 [PT] RewriteRule ^/type([0-9]+)page([0-9]+).html$ /type.php?typeid=$1&page=$2 [PT]   5.使用Apache的URL Rewrite配置多用戶虛擬服務器 要實現這個功能,首先要在DNS服務器上打開域 名的泛域名解析(自己做或者找域名服務商做)。 比如,我就把 *.semcase.com和 *.semcase.cn全部解析到了我的這臺Linux Server上。  然后,看一下我的Apache中關于*.semcase.com的虛擬主機的設定。 #*.com,*.osall.net ServerAdmin [email protected]   DocumentRoot /home/www/www.semcase.com ServerName dns.semcase.com ServerAlias dns.semcase.com semcase.com semcase.net *.semcase.com *.semcase.net CustomLog /var/log/httpd/osa/access_log.log" common ErrorLog /var/log/httpd/osa/error_log.log" AllowOverride None Order deny,allow # AddDefaultCharset GB2312 RewriteEngine on RewriteCond %{HTTP_HOST} ^[^.]+/.osall/.(com|net)$ RewriteRule ^(.+) %{HTTP_HOST}$1 [C] RewriteRule ^([^.]+)/.osall/.(com|net)(.*)$ /home/www/www.semcase.com/sylvan$3?un=$1&%{QUERY_STRING} [L]   在這段設定中,我把*.semcase.net和*.semcase.com 的Document Root都設定到了 /home/www/www.semcase.com 但是,繼續看下去,看到...配置了嗎?在這里我就配置了URL Rewrite規則。 RewriteEngine on #打開URL Rewrite功能 RewriteCond %{HTTP_HOST} ^[^.] +.osall.(com|net)$ #匹配條件,如果用戶輸入的URL中主機名是類似 xxxx.semcase.com 或者 xxxx.semcase.cn 就執行下面一句 RewriteRule ^(.+) %{HTTP_HOST}$1 [C] #把用戶輸入完整 的地址(GET方式的參數除外)作為參數傳給下一個規則,[C]是Chain串聯下一個規則的意思 RewriteRule ^([^.]+).osall.(com|net)(.*)$ /home/www/dev.semcase.com/sylvan$3? un=$1&%{QUERY_STRING} [L] # 最關鍵的是這一句,使用證則表達式解析用戶輸入的URL地址, 把主機名中的用戶名信息作為名為un的參數傳給/home/www/dev.semcase.com目錄下的腳本,并 在后面跟上用戶輸入的GET方式的傳入參數。并指明這是最后一條規則([L] 規則)。注意,在 這一句中指明的重寫后的地址用的是服務器上的絕對路徑,這是內部跳轉。如果使用 http://xxxx這樣的URL格式,則被稱為外部跳轉。使用外部跳轉的話,瀏覽著的瀏覽器中的URL 地址會改變成新的地址,而使用內部跳轉則瀏覽器中的地址不發生改變,看上去更像實際的二 級域名虛擬服務器。這樣設置后,重啟Apache服務器,測試一下,就大功告成了

RewriteCond (重寫規則執行條件)

0 發布于2012-07-10 閱讀: 2,814 次
RewriteCond 重寫規則執行條件 語法: RewriteCond TestString CondPattern 生效域: server config, virtual host, directory, .htaccess 特別的上面的 TestString, 可提供反向引用. 引用模式為: %N 其中N為(0 <= N <=9), 引用當前若干RewriteCond條件中最后符合的條件中的分組成分, 也就是括號里的內容.不過用到的不多. 反向應用多在RewriteRule里常用. RewriteCond 語法中的 TestStrng 為要被檢查的內容, CondPattern 是進行匹配的規則, 它是一個兼容Perl風格的正則表達式和一些其他的特有字符屬性. 這里介紹一下. 第一個: ! (感嘆號) 表示否的意思. 比如一個條件: 判斷訪問此頁面的上一頁URL是否包含 sex 字符的話可以用這樣: RewriteCond %{HTTP_REFERER} !(sex) 第二個: < 就是小于的意思, TestString < CondPattern. 第三個: > 就是大于于的意思, TestString < CondPattern. 第四個: = 相等的意思. <, >, = 三個和通常程序語言使用的 <, >, = 功能類似. 第五個: -d 是否是一個目錄. 判斷TestString是否不是一個目錄可以這樣: !-d 第六個: -f 是否是一個文件. 判斷TestString是否不是一個文件可以這樣: !-f 第七個: -s 是否是一個正常的有大小的文件. 判斷TestString是否不是一個正常的有大小的文件可以這樣: !-s 第八個: -l 是否是一個快捷方式文件. 判斷TestString是否不是一個快捷方式文件可以這樣: !-l 第九個: -x 是否是一個文件并且又執行權限. 判斷TestString是否不是一個文件并且又執行權限可以這樣: !-x 第十個: -F 檢查TestString是否是一個合法的文件,而且通過服務器范圍內的當前設置的訪問控制進行訪問。這個檢查是通過一個內部subrequest完成的, 因此需要小心使用這個功能以降低服務器的性能。 第十一個: -U 檢查TestString是否是一個合法的URL,而且通過服務器范圍內的當前設置的訪問控制進行訪問。這個檢查是通過一個內部subrequest完成的, 因此需要小心使用這個功能以降低服務器的性能. 另外: RewriteCond 指令后面可帶 Flag, 現在只要2個可用, 一個是 NC|nocase, 不區分大小寫的意思. 一個是 OR|ornext 表示連接下一個條件的意思. RewriteCond 實際需要使用情況比如要判斷一個條件成真的時候才執行相關的重寫操作. 緊接著它下面的 RewriteRule 總是在RewriteCond 條件判斷為真的時候才被執行. 看下面的一個例子: #開啟服務器重寫模式 RewriteEngine on #來自 www.test.cn 的連接訪問本站時都只能訪問 test.php 這頁. RewriteCond %{HTTP_REFERER} (www.test.cn) RewriteRule (.*)$ test.php #來自 www.test.com 的連接訪問本站時都只能訪問 newTest.php 這頁. RewriteCond %{HTTP_REFERER} (www.test.com) RewriteRule (.*)$ newTest.php OK, RewriteCond 就介紹到這里了. 其實很簡單. 就想程序里的 if() 這樣的效果.
 

Apache Rewrite實現URL的跳轉和域名跳轉

 
 
Rewirte主要的功能就是實現URL的跳轉,它的正則表達式是基于Perl語言。可基于服務器級的(httpd.conf)和目錄級的 (.htaccess)兩種方式。如果要想用到rewrite模塊,必須先安裝或加載rewrite模塊。方法有兩種一種是編譯apache的時候就直接安裝rewrite模塊,別一種是編譯apache時以DSO模式安裝apache,然后再利用源碼和apxs來安裝rewrite模塊。 基于服務器級的(httpd.conf)有兩種方法,一種是在httpd.conf的全局下直接利用RewriteEngine on來打開rewrite功能;另一種是在局部里利用RewriteEngine on來打開rewrite功能,下面將會舉例說明,需要注意的是,必須在每個virtualhost里用RewriteEngine on來打開rewrite功能。否則virtualhost里沒有RewriteEngine on它里面的規則也不會生效。 基于目錄級的(.htaccess),要注意一點那就是必須打開此目錄的FollowSymLinks屬性且在.htaccess里要聲明RewriteEngine on。 2、舉例說明: 例一.下面是在一個虛擬主機里定義的規則。功能是把client請求的主機前綴不是www.kiya.cn和70.40.213.183都跳轉到主機前綴為http://www.kiya.cn,避免相同內容的網頁有多個指向的域名,如http://kiya.cn。     NameVirtualHost 70.40.213.183:80     ServerAdmin [email protected]     DocumentRoot “/web”     ServerName kiya.cn     RewriteEngine on #打開rewirte功能     RewriteCond %{HTTP_HOST} !^www.kiya.cn [NC] #聲明Client請求的主機中前綴不是www.kiya.cn,其中 [NC] 的意思是忽略大小寫     RewriteCond %{HTTP_HOST} !^70.40.213.183 [NC] #聲明Client請求的主機中前綴不是70.40.213.183,其中 [NC] 的意思是忽略大小寫     RewriteCond %{HTTP_HOST} !^$ #聲明Client請求的主機中前綴不為空     RewriteRule ^(.*) http://www.kiya.cn/ [L] #含義是如果Client請求的主機中的前綴符合上述條件,則直接進行跳轉到http://www.kiya.cn/,[L]意味著立即停止重寫操作,并不再應用其他重寫規則。這里的.*是指匹配所有URL中不包含換行字符,()括號的功能是把所有的字符做一個標記,以便于后面的應用.就是引用前面里的 (.*)字符。 例二.將輸入 en.sicasoft.com 的域名時跳轉到www.sicasoft.com     RewriteEngine on     RewriteCond %{HTTP_HOST} ^en.sicasoft.com [NC]     RewriteRule ^(.*) http://www.sicasoft.com/ [L] 例三.賽卡軟件近期更換了域名,新域名為www.sicasoft.com, 更加簡短好記。這時需要將原來的域名ss.kiya.cn, 以及論壇所在地址ss.kiya.cn/bbs/定向到新的域名,以便用戶可以找到,并且使原來的論壇 URL 繼續有效而不出現 404 未找到,比如原來的http://ss.kiya.cn/bbs/tread-60.html, 讓它在新的域名下繼續有效,點擊后轉發到http://bbs.sicasoft.com/tread-60.html,而其他網頁,如原先的http: //ss.kiya.cn/purchase不會到二級域名bbs.sicasoft.com/purchase上,而是到 www.sicasoft.com/purchase 按照這樣的要求重定向規則應該這樣寫:     RewriteEngine On     RewriteCond %{REQUEST_URI} ^/bbs/     RewriteRule ^bbs/(.*) http://bbs.sicasoft.com/$1 [R=permanent,L]     RewriteCond %{REQUEST_URI} !^/bbs/     RewriteRule ^(.*) http://www.sicasoft.com/$1 [R=permanent,L] 3.Apache mod_rewrite規則重寫的標志一覽     1) R[=code](force redirect) 強制外部重定向     強制在替代字符串加上http://thishost[:thisport]/前綴重定向到外部的URL.如果code不指定,將用缺省的302 HTTP狀態碼。     2) F(force URL to be forbidden)禁用URL,返回403HTTP狀態碼。     3) G(force URL to be gone) 強制URL為GONE,返回410HTTP狀態碼。     4) P(force proxy) 強制使用代理轉發。     5) L(last rule) 表明當前規則是最后一條規則,停止分析以后規則的重寫。     6) N(next round) 重新從第一條規則開始運行重寫過程。     7) C(chained with next rule) 與下一條規則關聯     如果規則匹配則正常處理,該標志無效,如果不匹配,那么下面所有關聯的規則都跳過。     8) T=MIME-type(force MIME type) 強制MIME類型     9) NS (used only if no internal sub-request) 只用于不是內部子請求     10) NC(no case) 不區分大小寫     11) QSA(query string append) 追加請求字符串     12) NE(no URI escaping of output) 不在輸出轉義特殊字符     例如:RewriteRule /foo/(.*) /bar?arg=P1%3d$1 [R,NE] 將能正確的將/foo/zoo轉換成/bar?arg=P1=zoo     13) PT(pass through to next handler) 傳遞給下一個處理     例如:     RewriteRule ^/abc(.*) /def$1 [PT] # 將會交給/def規則處理     Alias /def /ghi     14) S=num(skip next rule(s)) 跳過num條規則     15) E=VAR:VAL(set environment variable) 設置環境變量 4.Apache rewrite例子集合 URL重定向 例子一: 同時達到下面兩個要求: 1.用http://www.zzz.com/xxx.php 來訪問 http://www.zzz.com/xxx/ 2.用http://yyy.zzz.com 來訪問 http://www.zzz.com/user.php?username=yyy 的功能     RewriteEngine On     RewriteCond %{HTTP_HOST} ^www.zzz.com     RewriteCond %{REQUEST_URI} !^user.php$     RewriteCond %{REQUEST_URI} .php$     RewriteRule (.*).php$ http://www.zzz.com/$1/ [R]     RewriteCond %{HTTP_HOST} !^www.zzz.com     RewriteRule ^(.+) %{HTTP_HOST} [C]     RewriteRule ^([^.]+).zzz.com http://www.zzz.com/user.php?username=$1 例子二: /type.php?typeid=* –> /type*.html /type.php?typeid=*&page=* –> /type*page*.html     RewriteRule ^/type([0-9]+).html$ /type.php?typeid=$1 [PT]     RewriteRule ^/type([0-9]+)page([0-9]+).html$ /type.php?typeid=$1&page=$2 [PT] 5.使用Apache的URL Rewrite配置多用戶虛擬服務器 要實現這個功能,首先要在DNS服務器上打開域名的泛域名解析(自己做或者找域名服務商做)。比如,我就把 *.kiya.us和 *.kiya.cn全部解析到了我的IP地址70.40.213.183上。 然后,看一下我的Apache中關于*.kiya.us的虛擬主機的設定。     ServerAdmin [email protected]     DocumentRoot /home/www/www.kiya.us     ServerName dns.kiya.us     ServerAlias dns.kiya.us kiya.us *.kiya.us     CustomLog /var/log/httpd/osa/access_log.log” common     ErrorLog /var/log/httpd/osa/error_log.log”     AllowOverride None     Order deny,allow     #AddDefaultCharset GB2312     RewriteEngine on     RewriteCond %{HTTP_HOST} ^[^.]+.kiya.(cn|us)$     RewriteRule ^(.+) %{HTTP_HOST}$1 [C]     RewriteRule ^([^.]+).kiya.(cn|us)(.*)$ /home/www/www.kiya.us/sylvan$3?un=$1&%{QUERY_STRING} [L] 在這段設定中,我把*.kiya.cn和*.kiya.us 的Document Root都設定到了 /home/www/www.kiya.us 繼續看下去,在這里我就配置了URL Rewrite規則。     RewriteEngine on #打開URL Rewrite功能     RewriteCond %{HTTP_HOST} ^[^.]+.kiya.(cn|us)$ #匹配條件,如果用戶輸入的URL中主機名是類似 xxxx.kiya.us 或者 xxxx.kiya.cn 就執行下面一句     RewriteRule ^(.+) %{HTTP_HOST}$1 [C] #把用戶輸入完整的地址(GET方式的參數除外)作為參數傳給下一個規則,[C]是Chain串聯下一個規則的意思     RewriteRule ^([^.]+).kiya.(cn|us)(.*)$ /home/www/dev.kiya.us/sylvan$3?un=$1&%{QUERY_STRING} [L]     # 最關鍵的是這一句,使用證則表達式解析用戶輸入的URL地址,把主機名中的用戶名信息作為名為un的參數傳給/home/www/dev.kiya.us 目錄下的腳本,并在后面跟上用戶輸入的GET方式的傳入參數。并指明這是最后一條規則([L]規則)。注意,在這一句中指明的重寫后的地址用的是服務器上的絕對路徑,這是內部跳轉。如果使用http://xxxx這樣的URL格式,則被稱為外部跳轉。使用外部跳轉的話,瀏覽著的瀏覽器中的URL地址會改變成新的地址,而使用內部跳轉則瀏覽器中的地址不發生改變,看上去更像實際的二級域名虛擬服務器。 設置后重啟Apache服務器就大功告成了! Update May 1, 2009 今天上網看到了有人提一個問題:     求Rewrite 防盜鏈正則     不允許www.im286.com www.chinaz.com 這兩個網站盜鏈 , 其它的網站都可以盜鏈的規則怎么寫. 論壇中的答案是:     RewriteEngine On     RewriteCond %{HTTP_REFERER} chinaz.com [NC]     RewriteCond %{HTTP_REFERER} im286.com [NC]     RewriteRule .*\.(jpg|jpeg|gif|png|rar|zip|txt|ace|torrent|gz|swf)$ http://www.xxx.com/fuck.png [R,NC,L] Update May 7, 2009 介紹一篇文章:http://lamp.linux.gov.cn/Apache/ApacheMenu/mod/mod_rewrite.html Update May 24, 2009 一、關于是否需要使用完全轉義,比如在 RewriteCond %{HTTP_REFERER} chinaz.com [NC] 中 把 chinaz.com 改成 chinaz\.com 答案是,兩者都是可以的。 二、今天在做 YOURcaddy.com (就是我去年做的PlanetCoachella的變形)的時候,在 GoDaddy 主機上無法正常轉向,后來找到了問題: 在HostMonster以及我自己的機器上,是用 RewriteRule ^business/([^\.]+)$ biz/detail.php?name=$1 [L] 達到改寫的。而在Godaddy主機上,是這樣: RewriteRule ^business/([^\.]+)$ /biz/detail.php?name=$1 [L] 目標文件前多了一個/ 現在想想,可能是因為沒有指定RewriteBase,至于到底是不是我改日再驗證一下。 三、添加兩個關于判斷 USER AGENT 例子和自動添加.php擴展名及自動換.html到.php擴展名的例子: 1     RewriteEngine on     RewriteCond %{HTTP_USER_AGENT} ^MSIE [NC,OR]     RewriteCond %{HTTP_USER_AGENT} ^Opera [NC]     RewriteRule ^.* – [F,L] 這里”-”表示沒有替換,瀏覽器為IE和Opera的訪客將被禁止訪問。 2     RewriteEngine On     RewriteBase /test     RewriteCond %{REQUEST_FILENAME}.php -f     RewriteRule ([^/]+)$ /test/$1.php     #for example: /test/admin => /test/admin.php     RewriteRule ([^/]+)\.html$ /test/$1.php [L]     #for example: /test/admin.html => /test/admin.php     限制目錄只能顯示圖片     < IfModule mod_rewrite.c>     RewriteEngine on     RewriteCond %{REQUEST_FILENAME} !^.*\.(gif|jpg|jpeg|png|swf)$     RewriteRule .*$ – [F,L]     < /IfModule> Update Jun 10, 2009 補充,關于特定文件擴展名的重寫。     重寫有某些擴展名的文件:     RewriteRule (.*.css$|.*.js$) gzip.php?$1 [L]     如果要排除一些擴展名:     RewriteRule !\.(js|ico|gif|jpg|JPG|png|PNG|css|pdf|swf)$ index.php
 
 
 
 ServerSignature Off         <Directory />                 Options FollowSymLinks                 AllowOverride None                 Order allow,deny                 Deny from all         </Directory>         <Directory /var/www/example_com/XXX/htdocs>                 Options FollowSymLinks MultiViews                 AllowOverride None                 Order allow,deny                 allow from all         </Directory>     RewriteEngine On     RewriteCond %{SERVER_NAME} !XXX.example.com     RewriteRule ^(.*)$ http://XXX.example.com$1 [R,L] </VirtualHost>

apache 二級域名解析實現方法

0 發布于2012-06-09 閱讀: 2,980 次
首先,你的擁有一個有泛域名解析的頂級域名,例如: domain.com其次,在 httpd.conf 中打開 mod_rewrite之后,在 httpd.conf 的最后,添加以下內容 代碼如下: RewriteEngine on RewriteMap lowercase int:tolower RewriteMap vhost txt:/usr/local/etc/apache/vhost.map RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$ RewriteCond ${vhost:%1} ^(/.*)$ RewriteRule ^/(.*)$ %1/$1
其中的 /usr/local/etc/apache 是你的 apache 服務器配置文件所在路徑,根據實際情況更改。 然后,在這個所在路徑的目錄下創建一個文件: vhost.map 內容為: 代碼如下: www.domain.com /usr/local/www/data-dist/domain bbs.domain.com /usr/local/www/data-dist/bbs anyname.domain.com /usr/local/www/data-dist/anyname
以上部分都是:” 域名+空格+絕對路徑” 的形式。
最后,在你的網站根目錄 /usr/local/www/data-dist 下,創建對應目錄: domain , bbs , anyname 等等,理論上可以無限。
這樣,通過瀏覽器,訪問 www.domain.com 時,實際上訪問的就是 /usr/local/www/data-dist/domain目錄下的文件。同理,訪問 bbs.domain.com 實際上訪問的就是 /usr/local/www/data-dist/bbs 目錄下的文件。而且,你可以 隨時更改 vhost.map 來增加、刪除、修改你的二級域名和所指向的實際路徑,不用重啟 apache。
第一步:打開apache的配置文件httpd.conf,去掉LoadModule rewrite_module modules/mod_rewrite.so前面的#號。 第二步:打配置文件尾部加上 RewriteEngine on RewriteMap lowercase int:tolower #定義映像文件 RewriteMap vhost txt:/apache/vhost/vhost.map #處理變名 RewriteCond %{REQUEST_URI} !^/icons/ RewriteCond %{REQUEST_URI} !^/cgi-bin/ RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$ 這里做基于文件的重新映射 RewriteCond ${vhost:%1} ^(/.*)$ RewriteRule ^/(.*)$ %1/$1 RewriteCond %{REQUEST_URI} ^/cgi-bin/ RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$ RewriteCond ${vhost:%1} ^(/.*)$ RewriteRule ^/(.*)$ %1/cgi-bin/$1
注意:vhost.map文件是域名和空間映像的文件,格式如下:  http://www.abc.com/vhostusr/www.abc.com http://www.xyz.com/vhostuser/www.xyz.com http://www.cccbbbbs.net/vhostuser/www.ccbbbb.net 第三步:保存配置文件,重啟apache。在開設可綁定域名的空間時,只要在vhost.map文件里添加相應記錄,并建立相應文件夾就OK了~~~ 其實這個可以用php腳本來完成的,很簡單的~~呵呵~~~ 注意啊:php_admin_value open_basedir “path,這個選項要配好啊~~新手如果不懂的,就不要動這個了~ ============================================== 方法二、
代碼如下: rewriteengine on rewritecond %{HTTP_HOST} [^.]+\.域名\.com$ rewriterule ^(.+) %{HTTP_HOST}$1 [C] rewriterule ([^.]+)\.域名\.com(.*) /$1$2
其他配置文件
接著在DNS中開設一個泛解析到對應的IP地址。 就可以實現下面的方案。
域名:domain.com 絕對路徑:/home/domain.com/ www.domain.com 自動解析到 /home/domain.com/www/ abc.domain.com 自動解析到 /home/domain.com/abc/ 等等子域名都可以自動解析到 /home/domains.com/對應子域名名稱的文件夾 直接建立子域名名稱的文件夾即可使用。不需重啟apache。/vhostuser/www.ccbbbb.net/vhostuser/www.xyz.com/vhostusr/www.abc.com  

.htaccess的Apache rewrite重寫規則基礎詳解

0 發布于2011-08-12 閱讀: 2,949 次

最近這幾天一直在研究Apache的重寫規則,雖然網上有很多教程,不過發現大部分都是抄襲一個人的,一點都不全,所以我想寫一個簡單的易于理解的教程,我學習.htaccess是從目錄保護開始的,這個也比較簡單,網上也有一些編輯器可以選擇,這兒就不說了,教程從綁定域名到子目錄開始,網上也有教程,大部分都是抄襲一個人的


我在 這兒解說一下,教程寫法是這樣的:

RewriteEngine On RewriteCond %{HTTP_HOST} ^(www\.)?xxx\.com$

RewriteCond %{REQUEST_URI} !^/blog/

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond % {REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ /blog/$1 # 沒有輸入文件名的默認到到首頁

RewriteCond %{HTTP_HOST} ^(www\.)?xxx\.com$

RewriteRule ^(/)? $ blog/index.php [L]

下面我開始解說一下上面的意思:

【RewriteEngine On】表示重寫引擎開,關閉狀態就是off,作用就是方便的開啟或關閉以下的語句,這樣就不需要一條一條的注釋語句了。

【RewriteCond %{HTTP_HOST} ^(www\.)?xxx\.com$】這是重寫條件,前面%{HTTP_HOST}表示當前訪問的網址,只是指前綴部分,格式是www.xxx.com不包括“http://”和“/”,^表示字符串開始,$表示字符串結尾,\.表示轉義的. ,如果不轉義也行,推薦轉義,防止有些伺服器不支援,?表示前面括弧www\.出現0次或1次,這句規則的意思就是如果訪問的網址是xxx.com或者 www.xxx.com就執行以下的語句,不符合就跳過。 【RewriteCond %{REQUEST_URI} !^/blog/】也是重寫條件,%{REQUEST_URI}表示訪問的相對地址,就是相對根目錄的地址,就是域名/后面的成分,格式上包括最前面的“/” ,!表示非,這句語句表示訪問的地址不以/blog/開頭,只是開頭^,沒有結尾$

后面更精彩 »

生财有道官网