.htaccess files are often used because they allow quick changes to the apache web server configuration and don’t require apache to be restarted. However with this flexibility comes a number of performance implications and as a result they should be avoided unless you have absolutely no other way to put configuration changes into effect e.g: shared hosting where you are unlikely to have access to httpd.conf.
The .htaccess performance hit
If .htaccess files are allowed (through the AllowOverride directive) then apache will look for .htaccess files on every request. In addition apache has to look up the directory tree to see if there are further .htaccess files in locations above the location the file is requested from so that it can tell which directives have precedence. For example: if you request a file from /foo/bar, apache has to look for /foo/bar/.htaccess, /foo/.htaccess and /.htaccess and that’s even if there are no .htaccess files present in any of those locations! Once a .htaccess file is found it has to be parsed and don’t forget all of this has to happen for every request!!
As there’s nothing in a .htaccess file that can’t be achieved in your httpd.conf (or files included by httpd.conf) it makes sense to move existing .htaccess rules into your apache conf using a Directory or Location directive as appropriate.
Restarting apache without dropping users
One other reason why .htaccess are seen as a convenience is that they don’t require apache to be restarted after configuration changes. However if you restart apache with “apachectl graceful” you only force the parent process to re-read the apache configuration files and the children to restart when they’re not doing anything and as a result no end users are suddenly dropped.
Finding all of the .htaccess files on your system
Simply drop on to your terminal and change directory to where you site files are located and run: find . -name *.htaccess -print. This should provide output that shows the location of all of the .htaccess files so you can go through one by one and move them to into httpd.conf or a file included by httpd.conf.
reference : http://muffinresearch.co.uk/archives/2008/04/07/avoiding-the-use-of-htaccess-for-performance/
2011年4月12日 星期二
2011年2月9日 星期三
find out the biggest total size of image size * request times
cat searchDateLog.txt | grep " 200 " | grep ".jpg" | cut -d ' ' -f 7,10 | sort | uniq -c | awk '{print $1*$3," ",$2}' | sort -n -r | head -n 100
2010年11月14日 星期日
[Debug]Apache on Mac OS X couldn't grab the accept mutex
I just ran into a problem where Apache wouldn't start on my Mac OS X laptop (Leopard 10.5.8 although it shouldn't really be relevant as it was working just fine for weeks with that OS version). The following was in the error log:
[Mon Aug 31 12:20:15 2009] [emerg] (13)Permission denied: couldn't grab the accept mutex
[Mon Aug 31 12:20:15 2009] [emerg] (13)Permission denied: couldn't grab the accept mutex
[Mon Aug 31 12:20:15 2009] [emerg] (13)Permission denied: couldn't grab the accept mutex
[Mon Aug 31 12:20:15 2009] [emerg] (13)Permission denied: couldn't grab the accept mutex
[Mon Aug 31 12:20:15 2009] [emerg] (13)Permission denied: couldn't grab the accept mutex
[Mon Aug 31 12:20:16 2009] [alert] Child 1294 returned a Fatal error... Apache is exiting!
The solution is to find the AcceptMutex line in your httpd.conf (add one if you don't have it already) and change it to
AcceptMutex flock
Rock on.
[Mon Aug 31 12:20:15 2009] [emerg] (13)Permission denied: couldn't grab the accept mutex
[Mon Aug 31 12:20:15 2009] [emerg] (13)Permission denied: couldn't grab the accept mutex
[Mon Aug 31 12:20:15 2009] [emerg] (13)Permission denied: couldn't grab the accept mutex
[Mon Aug 31 12:20:15 2009] [emerg] (13)Permission denied: couldn't grab the accept mutex
[Mon Aug 31 12:20:15 2009] [emerg] (13)Permission denied: couldn't grab the accept mutex
[Mon Aug 31 12:20:16 2009] [alert] Child 1294 returned a Fatal error... Apache is exiting!
The solution is to find the AcceptMutex line in your httpd.conf (add one if you don't have it already) and change it to
AcceptMutex flock
Rock on.
2010年7月25日 星期日
分析httpd的accesslog排列出访问前10的ip地址
日志格式:
192.168.10.234 - - [24/Sep/2009:10:35:58 +0800] "GET /svnroot/platform/branches/1.0sp1/operator HTTP/1.1" 401 470 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; InfoPath.2; MAXTHON 2.0)"
命令:
cat svn_access.log |awk '{print $1}'|sort|uniq -c|sort -nr|head -n 10
摘自:http://dev.firnow.com/course/6_system/linux/Linuxjs/20090925/177116.html
192.168.10.234 - - [24/Sep/2009:10:35:58 +0800] "GET /svnroot/platform/branches/1.0sp1/operator HTTP/1.1" 401 470 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; InfoPath.2; MAXTHON 2.0)"
命令:
cat svn_access.log |awk '{print $1}'|sort|uniq -c|sort -nr|head -n 10
摘自:http://dev.firnow.com/course/6_system/linux/Linuxjs/20090925/177116.html
用 Apache 拒絕網路流氓的騷擾
Google, Yahoo 的搜尋引擎之所以可以搜尋到很多資料,是因為他們時時刻刻都派著 “robot” 在網路上巡邏,Google 的叫 googlebot, MSN 叫 msnbot, Yahoo! 叫 Yahoo Slurp 等等,任務就是捉新的網頁或更新的網頁回去資料中心. 為了隱私之類的原因,國際組織訂有規則,規範 robot 的行為 — 基本上是 robot 要先參考網站根目錄的一個 robots.txt 的檔案,內容寫著 robot 的名稱及禁止捉取的目錄或檔案,例如:
User-agent: abc
Disallow: /not_for_abc/
User-agent: *
Disallow: /secret/
意思是禁止 abc 這個 robot 捉 /not_for_abc/ 目錄,及禁止所有的 robots 捉 /secret/ 目錄. 網站管理者理論上可以將不喜歡的 robot,或是禁止 robot 捉取的目錄或檔案,寫在這個檔案中.
但是這個只防君子不防小人,碰到網路流氓就沒轍了,有些搜尋引擎的 robot 根本不看網站的 robots.txt,就一路抓下去,實在另人髮指. 網路流氓是什麼,就是這些不遵守遊戲規則,到處亂捉別人網站的內容的壞蛋,這樣會造成網站的流量增加,也就是費用的增加,或是不想被搜尋的資料也被捉走了,侵犯網站的隱私. 很可惡是吧. 下面是幾個例子:
iaskspider 是「愛問」屬於中國新浪網的 robot,完全不管 robots.txt
60.28.164.87 - - [06/Jan/2007:06:28:47 +0800] "GET /wp/archives/2005/08/13/12/46/48/ HTTP/1.0" 200 20969 "-" "Mozilla/5.0 (compatible; iaskspider/1.0; MSIE 6.0)"
60.28.164.87 - - [06/Jan/2007:06:29:34 +0800] "GET /wp/archives/2005/08/13/21/28/00/ HTTP/1.0" 200 19601 "-" "Mozilla/5.0 (compatible; iaskspider/1.0; MSIE 6.0)"
60.28.164.87 - - [06/Jan/2007:06:31:45 +0800] "GET /wp/archives/2005/07/06/22/47/17/ HTTP/1.0" 200 39200 "-" "Mozilla/5.0 (compatible; iaskspider/1.0; MSIE 6.0)"
QihooBot,也是來自中國的「奇虎網」,也是垃圾一個,浪費一堆頻寬,來源 IP 有很多個:
220.181.34.162 - - [03/Jan/2007:11:36:27 +0800] "GET /wp/feed/ HTTP/1.1" 200 21947 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; QihooBot 1.0)"
220.181.34.170 - - [03/Jan/2007:11:38:14 +0800] "GET /wp/archives/2006/12/ HTTP/1.1" 200 5373 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; QihooBot 1.0)"
220.181.34.177 - - [03/Jan/2007:11:38:30 +0800] "GET /wp/archives/category/childtalking/ HTTP/1.1" 200 6554 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; QihooBot 1.0)"
另有 larbin,iearthworm,yodaoice,lanshanbot,Outfoxbot 等等一堆,到網路上徵信一下,這些通通不是什麼好東西,還有一個 WebClipping.com 不知是好人壞人…
碰到這種網路流氓,說實在的也沒什麼積極的辦法,不能叫網路警察把它捉起來...不過消極的辦法還是有的,把網站門戶看好 — Apache 可以擋住特定 IP,但因為 robots 大多有多重 IP,過濾壞蛋的姓名比較有效,可以用 BrowserMatchNoCase 來過濾,用法像是:
Order allow,deny
Allow from all
BrowserMatchNoCase "iaskspider" badguy
BrowserMatchNoCase "QihooBot" badguy
BrowserMatchNoCase "larbin" badguy
deny from env=badguy
如此,它們就會收到 Apache 丟回 403 碼:Forbidden
但是,有些更沒品的還會隱姓埋名,不敢用真面目見人的…
摘自:http://ying.homedns.org/wp/2007/02/190/
User-agent: abc
Disallow: /not_for_abc/
User-agent: *
Disallow: /secret/
意思是禁止 abc 這個 robot 捉 /not_for_abc/ 目錄,及禁止所有的 robots 捉 /secret/ 目錄. 網站管理者理論上可以將不喜歡的 robot,或是禁止 robot 捉取的目錄或檔案,寫在這個檔案中.
但是這個只防君子不防小人,碰到網路流氓就沒轍了,有些搜尋引擎的 robot 根本不看網站的 robots.txt,就一路抓下去,實在另人髮指. 網路流氓是什麼,就是這些不遵守遊戲規則,到處亂捉別人網站的內容的壞蛋,這樣會造成網站的流量增加,也就是費用的增加,或是不想被搜尋的資料也被捉走了,侵犯網站的隱私. 很可惡是吧. 下面是幾個例子:
iaskspider 是「愛問」屬於中國新浪網的 robot,完全不管 robots.txt
60.28.164.87 - - [06/Jan/2007:06:28:47 +0800] "GET /wp/archives/2005/08/13/12/46/48/ HTTP/1.0" 200 20969 "-" "Mozilla/5.0 (compatible; iaskspider/1.0; MSIE 6.0)"
60.28.164.87 - - [06/Jan/2007:06:29:34 +0800] "GET /wp/archives/2005/08/13/21/28/00/ HTTP/1.0" 200 19601 "-" "Mozilla/5.0 (compatible; iaskspider/1.0; MSIE 6.0)"
60.28.164.87 - - [06/Jan/2007:06:31:45 +0800] "GET /wp/archives/2005/07/06/22/47/17/ HTTP/1.0" 200 39200 "-" "Mozilla/5.0 (compatible; iaskspider/1.0; MSIE 6.0)"
QihooBot,也是來自中國的「奇虎網」,也是垃圾一個,浪費一堆頻寬,來源 IP 有很多個:
220.181.34.162 - - [03/Jan/2007:11:36:27 +0800] "GET /wp/feed/ HTTP/1.1" 200 21947 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; QihooBot 1.0)"
220.181.34.170 - - [03/Jan/2007:11:38:14 +0800] "GET /wp/archives/2006/12/ HTTP/1.1" 200 5373 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; QihooBot 1.0)"
220.181.34.177 - - [03/Jan/2007:11:38:30 +0800] "GET /wp/archives/category/childtalking/ HTTP/1.1" 200 6554 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; QihooBot 1.0)"
另有 larbin,iearthworm,yodaoice,lanshanbot,Outfoxbot 等等一堆,到網路上徵信一下,這些通通不是什麼好東西,還有一個 WebClipping.com 不知是好人壞人…
碰到這種網路流氓,說實在的也沒什麼積極的辦法,不能叫網路警察把它捉起來...不過消極的辦法還是有的,把網站門戶看好 — Apache 可以擋住特定 IP,但因為 robots 大多有多重 IP,過濾壞蛋的姓名比較有效,可以用 BrowserMatchNoCase 來過濾,用法像是:
Order allow,deny
Allow from all
BrowserMatchNoCase "iaskspider" badguy
BrowserMatchNoCase "QihooBot" badguy
BrowserMatchNoCase "larbin" badguy
deny from env=badguy
如此,它們就會收到 Apache 丟回 403 碼:Forbidden
但是,有些更沒品的還會隱姓埋名,不敢用真面目見人的…
摘自:http://ying.homedns.org/wp/2007/02/190/
2010年7月23日 星期五
Apache 防止 DDoS 攻擊
Apache 防止 DDoS 攻擊
DDoS (distributed denial-of-service) 及 DoS (denial-of-service) 在網路上十分常見,而 DoS 攻擊所傳送的請求跟正常的請求一樣,分別在於每秒鐘發出大量請求到伺服器,使伺服器的負載增加,最常見的情況是伺服器暫停服務。
而 mod_evasive 則是一個預防 Apache 遭受 DDos 攻擊的模組,可以防止同一個 IP 對相同 URI 發出的大量請求,可設定的選項有:
– 限制同一個 IP 在一定秒數內請求一個頁面或檔案的次數。
– 限制同一個 IP 一秒內只可發出 50 個請求。
– 設定被禁止的 IP 封鎖時間。
以下是 mod_evasive 的安裝方法:
1. 先將原來的 httpd.conf 備份起來。
2. 到 http://www.zdziarski.com/projects/mod_evasive/ 下載 mod_evasive。
3. 在指令模式解壓及編譯 mod_evasive:
tar zxvf mod_evasive_1.10.1.tar.gz
cd mod_evasive/
apxs -cia mod_evasive20.c
以上的 apxs 會放在 Apache 的 bin 目錄內;如果 Apache 版本是 1.3 的話,指令要改為:
apxs -cia mod_evasive.c
安裝好 mod_evasive 後,便要修改 httpd.conf 內容。
4. 開啟 httpd.conf,加入以內容:
DOSHashTableSize 3097
DOSPageCount 5
DOSSiteCount 100
DOSPageInterval 2
DOSSiteInterval 2
DOSBlockingPeriod 10
DOSBlockingPeriod 600
DOSHashTableSize — 這是佔用記憶體的大小,如果伺服器比較繁忙,這個數值要設定大一點。
DOSPageCount — 同一 IP 在一個時段內可以存取同一頁面的次數,超過會被禁止。
DOSSiteCount — 同一 IP 在一個網站內可以佔用多少 Object,超過會禁止。
DOSPageInterval — DOSPageCount 內的時段設定。
DOSSiteInterval — DOSSiteCount 的時間設定,以秒為單位。
DOSBlockingPeriod — 當發現疑似攻擊後,使用者會收到 403 Forbidden,這是設定封鎖的時間,以秒為單位。
5. 最後重新啟動 Apache 即可。
DDoS (distributed denial-of-service) 及 DoS (denial-of-service) 在網路上十分常見,而 DoS 攻擊所傳送的請求跟正常的請求一樣,分別在於每秒鐘發出大量請求到伺服器,使伺服器的負載增加,最常見的情況是伺服器暫停服務。
而 mod_evasive 則是一個預防 Apache 遭受 DDos 攻擊的模組,可以防止同一個 IP 對相同 URI 發出的大量請求,可設定的選項有:
– 限制同一個 IP 在一定秒數內請求一個頁面或檔案的次數。
– 限制同一個 IP 一秒內只可發出 50 個請求。
– 設定被禁止的 IP 封鎖時間。
以下是 mod_evasive 的安裝方法:
1. 先將原來的 httpd.conf 備份起來。
2. 到 http://www.zdziarski.com/projects/mod_evasive/ 下載 mod_evasive。
3. 在指令模式解壓及編譯 mod_evasive:
tar zxvf mod_evasive_1.10.1.tar.gz
cd mod_evasive/
apxs -cia mod_evasive20.c
以上的 apxs 會放在 Apache 的 bin 目錄內;如果 Apache 版本是 1.3 的話,指令要改為:
apxs -cia mod_evasive.c
安裝好 mod_evasive 後,便要修改 httpd.conf 內容。
4. 開啟 httpd.conf,加入以內容:
DOSHashTableSize 3097
DOSPageCount 5
DOSSiteCount 100
DOSPageInterval 2
DOSSiteInterval 2
DOSBlockingPeriod 10
DOSBlockingPeriod 600
DOSHashTableSize — 這是佔用記憶體的大小,如果伺服器比較繁忙,這個數值要設定大一點。
DOSPageCount — 同一 IP 在一個時段內可以存取同一頁面的次數,超過會被禁止。
DOSSiteCount — 同一 IP 在一個網站內可以佔用多少 Object,超過會禁止。
DOSPageInterval — DOSPageCount 內的時段設定。
DOSSiteInterval — DOSSiteCount 的時間設定,以秒為單位。
DOSBlockingPeriod — 當發現疑似攻擊後,使用者會收到 403 Forbidden,這是設定封鎖的時間,以秒為單位。
5. 最後重新啟動 Apache 即可。
2010年6月30日 星期三
2010年6月22日 星期二
2010年1月25日 星期一
2010年1月20日 星期三
Caching with mod_headers 1.3|2.0|2.2
# 3 Month
Header set Cache-Control "max-age=7257600"
# 1 Week
Header set Cache-Control "max-age=604800"
# 10 Minutes
Header set Cache-Control "max-age=600"
# NONE
Header unset Cache-Control
Header unset Expires
Header unset Last-Modified
FileETag None
Header unset Pragma
摘自:http://www.askapache.com/htaccess/speed-up-sites-with-htaccess-caching.html
2009年12月21日 星期一
RHEL Linux安裝phpMyAdmin
到phpMyAdmin網頁下載最新的套件http://www.phpmyadmin.net/home_page/index.php
將下載回來的tar檔解開
#tar zxvf phpMyAdmin-2.11.8.1-all-languages.tar.gz
再將解壓縮的資料夾改名並移動到網頁的根目錄
(預設為/var/www/html)
#mv ./phpMyAdmin-2.11.8.1-all-languages /var/www/html/phpMyAdmin
#cd /var/www/html/phpMyAdmin
產生config.inc.php設定檔
預設是沒有這個檔案的,要先將config.sample.inc.php複製成config.inc.php
#cp ./config.sample.inc.php ./config.inc.php
將認證方式改為http或是cookie還有修改hostname
如果你要以http認證只要修改2個地方
#vi ./config.inc.php
$cfg['Servers'][$i]['auth_type'] = 'http'; <==改為http
$cfg['Servers'][$i]['host'] = '127.0.0.1'; <==改成你127.0.0.1
如果你要以cookie認證方式那你還要多設一個地方
#vi ./config.inc.php
$cfg['blowfish_secret'] = 'gtry356dfgejdkv42jnl5'; <==隨便輸入亂數的字讓cookie做密碼加密演算,最多46個字
$cfg['Servers'][$i]['auth_type'] = 'cookie'; <==改為cookie
$cfg['Servers'][$i]['host'] = 'example.com.tw'; <==改成你的電腦名稱
做完以上2個設定就完成了
因為之前有安裝一些php的套件,所以要重起httpd
#service httpd restart
網路上很多舊文章都說要改
$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] = '*****';
那是舊的認證方法了,現在為了安全考量已不這麼做了.
將下載回來的tar檔解開
#tar zxvf phpMyAdmin-2.11.8.1-all-languages.tar.gz
再將解壓縮的資料夾改名並移動到網頁的根目錄
(預設為/var/www/html)
#mv ./phpMyAdmin-2.11.8.1-all-languages /var/www/html/phpMyAdmin
#cd /var/www/html/phpMyAdmin
產生config.inc.php設定檔
預設是沒有這個檔案的,要先將config.sample.inc.php複製成config.inc.php
#cp ./config.sample.inc.php ./config.inc.php
將認證方式改為http或是cookie還有修改hostname
如果你要以http認證只要修改2個地方
#vi ./config.inc.php
$cfg['Servers'][$i]['auth_type'] = 'http'; <==改為http
$cfg['Servers'][$i]['host'] = '127.0.0.1'; <==改成你127.0.0.1
如果你要以cookie認證方式那你還要多設一個地方
#vi ./config.inc.php
$cfg['blowfish_secret'] = 'gtry356dfgejdkv42jnl5'; <==隨便輸入亂數的字讓cookie做密碼加密演算,最多46個字
$cfg['Servers'][$i]['auth_type'] = 'cookie'; <==改為cookie
$cfg['Servers'][$i]['host'] = 'example.com.tw'; <==改成你的電腦名稱
做完以上2個設定就完成了
因為之前有安裝一些php的套件,所以要重起httpd
#service httpd restart
網路上很多舊文章都說要改
$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] = '*****';
那是舊的認證方法了,現在為了安全考量已不這麼做了.
You don't have permission to access/phpMyAdmin/ on this server.
關閉SELinux即可
shell>vi /etc/sysconfig/selinux
selinux=disable
shell>vi /etc/grub.conf
kernel /vmlinuz-2.6.18-8.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet selinux=0
在quiet后面加上selinux=0
shell>vi /etc/sysconfig/selinux
selinux=disable
shell>vi /etc/grub.conf
kernel /vmlinuz-2.6.18-8.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet selinux=0
在quiet后面加上selinux=0
2009年11月26日 星期四
擋掉(block) Baidu Spider
影響主機負載過重與頻寬傳輸量最有可能的原因就是 Robots 機器人作祟,而其中又以 百度(Baidu) Spider 為最。
.htaccess:
Or
httpd.conf
Module Identifier: setenvif_module
.htaccess:
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^Baiduspider [NC]
RewriteRule .* - [F]
Or
SetEnvIf User-Agent ^Baidu baidu
Deny from env=baidu
httpd.conf
SetEnvIfNoCase User-Agent "^Baidu" bad_bot
Order Allow,Deny
Allow from all
Deny from env=bad_bot
Module Identifier: setenvif_module
2009年10月23日 星期五
apache net helpmsg 3547
這個問題搞了我好久
apache一直不能啟動
最後發現
是因為80port被吃掉了
是誰吃掉勒
開始>執行>cmd
輸入netstat -nab
哈 有沒有找到一個:port 80
轉載至 http://orange21.pixnet.net/blog/post/17512253
原來有這麼方便的技巧
cmd指令真是太神奇了
apache一直不能啟動
最後發現
是因為80port被吃掉了
是誰吃掉勒
開始>執行>cmd
輸入netstat -nab
哈 有沒有找到一個:port 80
轉載至 http://orange21.pixnet.net/blog/post/17512253
原來有這麼方便的技巧
cmd指令真是太神奇了
2009年8月19日 星期三
RewriteRule 記事
想用RewriteRule把網址轉成 .html
www.xxx/test.php
www.xxx/1st/test2.php
www.xxx/1st/2st/test3.php
轉成
www.xxx/test.html
www.xxx/1st/test2.html
www.xxx/1st/2st/test3.html
#啟動 Rewrite
RewriteEngine On
#設定重寫的目錄
RewriteBase /
#設定重寫規則
RewriteRule ^(.+)\.htm$ $1.php
URL Rewriting Engine
http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html
apache RewriteRule 的問題
http://httpd.apache.org/docs/2.0/misc/rewriteguide.html
RewriteRule IIS映射
安裝說明:
1、在IIS的Isapi上新增這個篩選器,篩選器名稱 re,可執行檔案選擇 Rewrite.dll ;
2、設定httpd.ini檔案
RewriteRule /news/(\d+)\.html /jsp/news\.jsp\?id=$1 [N,I]
表示將news.jsp?id=95 轉換成news/95.html
以此類推,如果你有更多的參數,則增加相應的(\d+),而後面的id=$1,則增加id=$2,等等。
目前較為普遍的動態網頁包括asp,php,jsp,shtml,jhtml,cgi......甚至還有一些自己定義的,比如:aspx,do,index,hello等等。表現形式為:news.asp?id=95。建議讀者通過re_write將其轉換成news/95.html,以便於google對改網頁的識別。
re_write是iis裡的一個模塊,你可以從http://www.GoogleDmoz.com/dirtool/re_write.zip
當需要將news.jsp?id=95的映射成news/95.html時,只需設定httpd.ini檔案:
RewriteRule /news/(\d+)\.html /news\.jsp\?id=$1 [N,I]
這樣就把 /news/95.html 這樣的請求映射成了 /news.jsp?id=95
然後你在連接處這樣寫:95新聞。
如果你的新聞是通過資料庫循環讀取出來的,那麼寫法是:
while(rs.next())
{
String id = (String)rs.getString('id');
out.print('');
out.print('95新聞');
out.print('');
}
如果你在處理資料翻頁,那麼寫法是:
More_<%=Page%>_<%=type%>.html (註:page是翻頁頁數,type是資料類型)
表現形式:More_1_95.html
如果翻下一頁,則為:More_2_95.html,繼續下一頁的循環,則是:
More_3_95.html,以此類推。
不過你需要在httpd.ini檔案中增加以下代碼:
RewriteRule /More_(\d+)_(\d+)\.html /jsp/more\.jsp\?page=$1&type=$2 [N,I]
如果你的動態程式有多個參數需要傳遞,那麼就增加多個(\d+)即可,如下:
RewriteRule /More_(\d+)_(\d+)_(\d+)\.html /jsp/more\.jsp\?page=$1&type=$2&type2=$3 [N,I]
翻頁處理表現形式是:More_1_95.html
Apache的Mod_rewrite
Syntax: RewriteRule Pattern Substitution [flags]
一條RewriteRule指令,定義一條重寫規則,規則間的順序非常重要。對Apache1.2及以後的版本,模板(pattern)是一個POSIX正則式,用以匹配當前的URL。當前的URL不一定是用記最初提交的URL,因為可能用一些規則在此規則前已經對URL進行了處理。
對mod_rewrite來說,!是個合法的模板前綴,表示「非」的意思,這對描述「不滿足某種匹配條件」的情況非常方便,或用作最後一條默認規則。當使用!時,不能在模板中有分組的通配符,也不能做後向引用。
當匹配成功後,Substitution會被用來替換相應的匹配,它除了可以是普通的字符串以外,還可以包括:
1. $N,引用RewriteRule模板中匹配的相關字串,N表示序號,N=0..9
2. %N,引用最後一個RewriteCond模板中匹配的資料,N表示序號
3. %{VARNAME},服務器變數
4. ${mapname:key|default},映射函數呼叫
這些特殊內容的擴展,按上述順序進行。
一個URL的全部相關部分都會被Substitution替換,而且這個替換過程會一直持續到所有的規則都被執行完,除非明確地用L標誌中斷處理過程。
當susbstitution有」-」前綴時,表示不進行替換,只做匹配檢查。
利用RewriteRule,可定義含有請求串(Query String)的URL,此時只需在Sustitution中加入一個?,表示此後的內容放入QUERY_STRING變數中。如果要清空一個QUERY_STRING變數,只需要以?結束Substitution串即可。
如果給一個Substitution增加一個
1. 'redirect|R [=code]' (強制重定向)
給當前的URI增加前綴
2. 'forbidden|F' (強制禁止訪問URL所指的資源)
立即傳回狀態值403 (FORBIDDEN)的應答包。將這個標誌與合適的RewriteConds 聯合使用,可以阻斷訪問某些URL。
3. 'gone|G' (強制傳回URL所指資源為不存在(gone))
立即傳回狀態值410 (GONE)的應答包。用這個標誌來標記URL所指的資源永久消失了.
4. # 'proxy|P' (強制將當前URL送往代理模塊(proxy module))
這個標誌,強制將substitution當作一個發向代理模塊的請求,並立即將共送往代理模塊。因此,必須確保substitution串是一個合法的URI (如, 典型的情況是以
5. 'last|L' (最後一條規則)
中止重寫流程,不再對當前URL施加更多的重寫規則。這相當於perl的last命令或C的break命令。
6. 'next|N' (下一輪)
重新從第一條重寫規則開始執行重寫過程,新開的過程中的URL不應當與最初的URL相同。 這相當於Perl的next命令或C的continue命令. 千萬小心不要產生死循環。
7. # 'chain|C' (將當前的規則與其後續規則綑綁(chained))
當規則匹配時,處理過程與沒有綑綁一樣;如果規則不匹配,則綑綁在一起的後續規則也不在檢查和執行。
8. 'type|T=MIME-type' (強制MIME類型)
強制將目標檔案的MIME-type為某MIME類型。例如,這可用來模仿mod_alias模塊對某目錄的ScriptAlias指定,通過強制將該目錄下的所有檔案的類型改為 「application/x-httpd-cgi」.
9. 'nosubreq|NS' (used only if no internal sub-request )
這個標誌強制重寫引擎跳過為內部sub-request的重寫規則.例如,當mod_include試圖找到某一目錄下的默認檔案時 (index.xxx),sub-requests 會在Apache內部發生. Sub-requests並非總是有用的,在某些情況下如果整個規則集施加到它上面,會產生錯誤。利用這個標誌可排除執行一些規則。
10. 'nocase|NC' (模板不區分大小寫)
這個標誌會使得模板匹配當前URL時忽略大小寫的差別。
11. 'qsappend|QSA' (追加請求串(query string))
這個標誌,強制重寫引擎為Substitution的請求串追加一部分串,則不是替換掉原來的。借助這個標誌,可以使用一個重寫規則給請求串增加更多的資料。
12. 'noescape|NE' (不對輸出結果中的特殊字符進行轉義處理)
通常情況下,mod_write的輸出結果中,特殊字符(如'%', '$', ';', 等)會轉義為它們的16進制形式(如分別為'%25', '%24', and '%3B')。這個標誌會禁止mod_rewrite對輸出結果進行此類操作。 這個標誌只能在 Apache 1.3.20及以後的版本中使用。
13. 'passthrough|PT' (通過下一個處理器)
這個標誌強制重寫引擎用filename字段的值來替換內部request_rec資料結構中uri字段的值。. 使用這個標誌,可以使後續的其它URI-to-filename轉換器的Alias、ScriptAlias、Redirect等指令,也能正常處理RewriteRule指令的輸出結果。用一個小例子來說明它的語義:如果要用mod_rewrite的重寫引擎將/abc轉換為/def,然後用mod_alas將/def重寫為ghi,則要:
RewriteRule ^/abc(.*) /def$1 [PT]
Alias /def /ghi
如果PT標誌被忽略,則mod_rewrite也能很好完成工作,如果., 將 uri=/abc/... 轉換為filename=/def/... ,完全符合一個URI-to-filename轉換器的動作。接下來 mod_alias 試圖做 URI-to-filename 轉換時就會出問題。
注意:如果要混合都含有URL-to-filename轉換器的不同的模塊的指令,必須用這個標誌。最典型的例子是mod_alias和mod_rewrite的使用。
14. 'skip|S=num' (跳過後面的num個規則)
當前規則匹配時,強制重寫引擎跳過後續的num個規則。用這個可以來模仿if-then-else結構:then子句的最後一條rule的標誌是skip=N,而N是else子句的規則條數。
15. 'env|E=VAR:VAL' (設定環境變數)
設定名為VAR的環境變數的值為VAL,其中VAL中可以含有正則式的後向引用($N或%N)。這個標誌可以使用多次,以設定多個環境變數。這兒設定的變數,可以在多種情況下被引用,如在XSSI或CGI中。另外,也可以在RewriteCond模板中以%{ENV:VAR}的形式被引用。
16. 注意:一定不要忘記,在服務器範圍內的配置檔案中,模板(pattern)用以匹配整個URL;而在目錄範圍內的配置檔案中,目錄前綴總是被自動去掉後再進行模板匹配的,且在替換完成後自動再加上這個前綴。這個功能對很多種類的重寫是非常重要的,因為如果沒有去前綴,則要進行父目錄的匹配,而父目錄的訊息並不是總能得到的。一個例外是,當substitution中有http://打頭時,則不再自動增加前綴了,如果P標誌出現,則會強制轉向代理。
注意:如果要在某個目錄範圍內啟動重寫引擎,則需要在相應的目錄配置檔案中設定「RewriteEngine on」,且目錄的「Options FollowSymLinks」必須設定。如果管理員由於安全原因沒有打開FollowSymLinks,則不能使用重寫引擎。
http://hostname開頭),否則會從代理模塊得到一個錯誤. 這個標誌,是ProxyPass指令的一個更強勁的實現,將遠程請求(remote stuff)映射到本地服務器的名字空間(namespace)中來。
注意,使用這個功能必須確保代理模塊已經編譯到Apache 服務器程式中了. 可以用「httpd -l 」命令,來檢查輸出中是否含有mod_proxy.c來確認一下。如果沒有,而又需要使用這個功能,則需要重新編譯``httpd''程式並使用mod_proxy有效。 http://thishost[:thisport]/, 從而生成一個新的URL,強制生成一個外部重定向(external redirection,指生的URL發送到客戶端,由客戶端再次以新的URL發出請求,雖然新URL仍指向當前的服務器). 如果沒有指定的code值,則HTTP應答以狀態值302 (MOVED TEMPORARILY),如果想使用300-400(不含400)間的其它值可以通過在code的位置以相應的數字指定,也可以用標誌名指定: temp (默認值), permanent, seeother.
注意,當使用這個標誌時,要確實substitution是個合法的URL,這個標誌只是在URL前增加http://thishost[:thisport]/前綴而已,重寫操作會繼續進行。如果要立即將新URL重定向,用L標誌來中重寫流程。 http://thishost[:port]的前綴,則mod_rewrite會自動將此前綴去掉。因此,利用http://thisthost做一個無條件的重定向到自己,將難以奏效。要實現這種效果,必須使用R標誌。
Flags是可選參數,當有多個標誌同時出現時,彼此間以逗號分隔。
摘自:http://bbs.flash2u.com.tw/dv_rss_xhtml_54_92453_4.html
www.xxx/test.php
www.xxx/1st/test2.php
www.xxx/1st/2st/test3.php
轉成
www.xxx/test.html
www.xxx/1st/test2.html
www.xxx/1st/2st/test3.html
#啟動 Rewrite
RewriteEngine On
#設定重寫的目錄
RewriteBase /
#設定重寫規則
RewriteRule ^(.+)\.htm$ $1.php
URL Rewriting Engine
http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html
apache RewriteRule 的問題
http://httpd.apache.org/docs/2.0/misc/rewriteguide.html
RewriteRule IIS映射
安裝說明:
1、在IIS的Isapi上新增這個篩選器,篩選器名稱 re,可執行檔案選擇 Rewrite.dll ;
2、設定httpd.ini檔案
RewriteRule /news/(\d+)\.html /jsp/news\.jsp\?id=$1 [N,I]
表示將news.jsp?id=95 轉換成news/95.html
以此類推,如果你有更多的參數,則增加相應的(\d+),而後面的id=$1,則增加id=$2,等等。
目前較為普遍的動態網頁包括asp,php,jsp,shtml,jhtml,cgi......甚至還有一些自己定義的,比如:aspx,do,index,hello等等。表現形式為:news.asp?id=95。建議讀者通過re_write將其轉換成news/95.html,以便於google對改網頁的識別。
re_write是iis裡的一個模塊,你可以從http://www.GoogleDmoz.com/dirtool/re_write.zip
當需要將news.jsp?id=95的映射成news/95.html時,只需設定httpd.ini檔案:
RewriteRule /news/(\d+)\.html /news\.jsp\?id=$1 [N,I]
這樣就把 /news/95.html 這樣的請求映射成了 /news.jsp?id=95
然後你在連接處這樣寫:95新聞。
如果你的新聞是通過資料庫循環讀取出來的,那麼寫法是:
while(rs.next())
{
String id = (String)rs.getString('id');
out.print('');
out.print('95新聞');
out.print('');
}
如果你在處理資料翻頁,那麼寫法是:
More_<%=Page%>_<%=type%>.html (註:page是翻頁頁數,type是資料類型)
表現形式:More_1_95.html
如果翻下一頁,則為:More_2_95.html,繼續下一頁的循環,則是:
More_3_95.html,以此類推。
不過你需要在httpd.ini檔案中增加以下代碼:
RewriteRule /More_(\d+)_(\d+)\.html /jsp/more\.jsp\?page=$1&type=$2 [N,I]
如果你的動態程式有多個參數需要傳遞,那麼就增加多個(\d+)即可,如下:
RewriteRule /More_(\d+)_(\d+)_(\d+)\.html /jsp/more\.jsp\?page=$1&type=$2&type2=$3 [N,I]
翻頁處理表現形式是:More_1_95.html
Apache的Mod_rewrite
Syntax: RewriteRule Pattern Substitution [flags]
一條RewriteRule指令,定義一條重寫規則,規則間的順序非常重要。對Apache1.2及以後的版本,模板(pattern)是一個POSIX正則式,用以匹配當前的URL。當前的URL不一定是用記最初提交的URL,因為可能用一些規則在此規則前已經對URL進行了處理。
對mod_rewrite來說,!是個合法的模板前綴,表示「非」的意思,這對描述「不滿足某種匹配條件」的情況非常方便,或用作最後一條默認規則。當使用!時,不能在模板中有分組的通配符,也不能做後向引用。
當匹配成功後,Substitution會被用來替換相應的匹配,它除了可以是普通的字符串以外,還可以包括:
1. $N,引用RewriteRule模板中匹配的相關字串,N表示序號,N=0..9
2. %N,引用最後一個RewriteCond模板中匹配的資料,N表示序號
3. %{VARNAME},服務器變數
4. ${mapname:key|default},映射函數呼叫
這些特殊內容的擴展,按上述順序進行。
一個URL的全部相關部分都會被Substitution替換,而且這個替換過程會一直持續到所有的規則都被執行完,除非明確地用L標誌中斷處理過程。
當susbstitution有」-」前綴時,表示不進行替換,只做匹配檢查。
利用RewriteRule,可定義含有請求串(Query String)的URL,此時只需在Sustitution中加入一個?,表示此後的內容放入QUERY_STRING變數中。如果要清空一個QUERY_STRING變數,只需要以?結束Substitution串即可。
如果給一個Substitution增加一個
1. 'redirect|R [=code]' (強制重定向)
給當前的URI增加前綴
2. 'forbidden|F' (強制禁止訪問URL所指的資源)
立即傳回狀態值403 (FORBIDDEN)的應答包。將這個標誌與合適的RewriteConds 聯合使用,可以阻斷訪問某些URL。
3. 'gone|G' (強制傳回URL所指資源為不存在(gone))
立即傳回狀態值410 (GONE)的應答包。用這個標誌來標記URL所指的資源永久消失了.
4. # 'proxy|P' (強制將當前URL送往代理模塊(proxy module))
這個標誌,強制將substitution當作一個發向代理模塊的請求,並立即將共送往代理模塊。因此,必須確保substitution串是一個合法的URI (如, 典型的情況是以
5. 'last|L' (最後一條規則)
中止重寫流程,不再對當前URL施加更多的重寫規則。這相當於perl的last命令或C的break命令。
6. 'next|N' (下一輪)
重新從第一條重寫規則開始執行重寫過程,新開的過程中的URL不應當與最初的URL相同。 這相當於Perl的next命令或C的continue命令. 千萬小心不要產生死循環。
7. # 'chain|C' (將當前的規則與其後續規則綑綁(chained))
當規則匹配時,處理過程與沒有綑綁一樣;如果規則不匹配,則綑綁在一起的後續規則也不在檢查和執行。
8. 'type|T=MIME-type' (強制MIME類型)
強制將目標檔案的MIME-type為某MIME類型。例如,這可用來模仿mod_alias模塊對某目錄的ScriptAlias指定,通過強制將該目錄下的所有檔案的類型改為 「application/x-httpd-cgi」.
9. 'nosubreq|NS' (used only if no internal sub-request )
這個標誌強制重寫引擎跳過為內部sub-request的重寫規則.例如,當mod_include試圖找到某一目錄下的默認檔案時 (index.xxx),sub-requests 會在Apache內部發生. Sub-requests並非總是有用的,在某些情況下如果整個規則集施加到它上面,會產生錯誤。利用這個標誌可排除執行一些規則。
10. 'nocase|NC' (模板不區分大小寫)
這個標誌會使得模板匹配當前URL時忽略大小寫的差別。
11. 'qsappend|QSA' (追加請求串(query string))
這個標誌,強制重寫引擎為Substitution的請求串追加一部分串,則不是替換掉原來的。借助這個標誌,可以使用一個重寫規則給請求串增加更多的資料。
12. 'noescape|NE' (不對輸出結果中的特殊字符進行轉義處理)
通常情況下,mod_write的輸出結果中,特殊字符(如'%', '$', ';', 等)會轉義為它們的16進制形式(如分別為'%25', '%24', and '%3B')。這個標誌會禁止mod_rewrite對輸出結果進行此類操作。 這個標誌只能在 Apache 1.3.20及以後的版本中使用。
13. 'passthrough|PT' (通過下一個處理器)
這個標誌強制重寫引擎用filename字段的值來替換內部request_rec資料結構中uri字段的值。. 使用這個標誌,可以使後續的其它URI-to-filename轉換器的Alias、ScriptAlias、Redirect等指令,也能正常處理RewriteRule指令的輸出結果。用一個小例子來說明它的語義:如果要用mod_rewrite的重寫引擎將/abc轉換為/def,然後用mod_alas將/def重寫為ghi,則要:
RewriteRule ^/abc(.*) /def$1 [PT]
Alias /def /ghi
如果PT標誌被忽略,則mod_rewrite也能很好完成工作,如果., 將 uri=/abc/... 轉換為filename=/def/... ,完全符合一個URI-to-filename轉換器的動作。接下來 mod_alias 試圖做 URI-to-filename 轉換時就會出問題。
注意:如果要混合都含有URL-to-filename轉換器的不同的模塊的指令,必須用這個標誌。最典型的例子是mod_alias和mod_rewrite的使用。
14. 'skip|S=num' (跳過後面的num個規則)
當前規則匹配時,強制重寫引擎跳過後續的num個規則。用這個可以來模仿if-then-else結構:then子句的最後一條rule的標誌是skip=N,而N是else子句的規則條數。
15. 'env|E=VAR:VAL' (設定環境變數)
設定名為VAR的環境變數的值為VAL,其中VAL中可以含有正則式的後向引用($N或%N)。這個標誌可以使用多次,以設定多個環境變數。這兒設定的變數,可以在多種情況下被引用,如在XSSI或CGI中。另外,也可以在RewriteCond模板中以%{ENV:VAR}的形式被引用。
16. 注意:一定不要忘記,在服務器範圍內的配置檔案中,模板(pattern)用以匹配整個URL;而在目錄範圍內的配置檔案中,目錄前綴總是被自動去掉後再進行模板匹配的,且在替換完成後自動再加上這個前綴。這個功能對很多種類的重寫是非常重要的,因為如果沒有去前綴,則要進行父目錄的匹配,而父目錄的訊息並不是總能得到的。一個例外是,當substitution中有http://打頭時,則不再自動增加前綴了,如果P標誌出現,則會強制轉向代理。
注意:如果要在某個目錄範圍內啟動重寫引擎,則需要在相應的目錄配置檔案中設定「RewriteEngine on」,且目錄的「Options FollowSymLinks」必須設定。如果管理員由於安全原因沒有打開FollowSymLinks,則不能使用重寫引擎。
http://hostname開頭),否則會從代理模塊得到一個錯誤. 這個標誌,是ProxyPass指令的一個更強勁的實現,將遠程請求(remote stuff)映射到本地服務器的名字空間(namespace)中來。
注意,使用這個功能必須確保代理模塊已經編譯到Apache 服務器程式中了. 可以用「httpd -l 」命令,來檢查輸出中是否含有mod_proxy.c來確認一下。如果沒有,而又需要使用這個功能,則需要重新編譯``httpd''程式並使用mod_proxy有效。 http://thishost[:thisport]/, 從而生成一個新的URL,強制生成一個外部重定向(external redirection,指生的URL發送到客戶端,由客戶端再次以新的URL發出請求,雖然新URL仍指向當前的服務器). 如果沒有指定的code值,則HTTP應答以狀態值302 (MOVED TEMPORARILY),如果想使用300-400(不含400)間的其它值可以通過在code的位置以相應的數字指定,也可以用標誌名指定: temp (默認值), permanent, seeother.
注意,當使用這個標誌時,要確實substitution是個合法的URL,這個標誌只是在URL前增加http://thishost[:thisport]/前綴而已,重寫操作會繼續進行。如果要立即將新URL重定向,用L標誌來中重寫流程。 http://thishost[:port]的前綴,則mod_rewrite會自動將此前綴去掉。因此,利用http://thisthost做一個無條件的重定向到自己,將難以奏效。要實現這種效果,必須使用R標誌。
Flags是可選參數,當有多個標誌同時出現時,彼此間以逗號分隔。
摘自:http://bbs.flash2u.com.tw/dv_rss_xhtml_54_92453_4.html
2009年7月31日 星期五
Awstats日誌統計和其他統計系統的差異
如果你同時使用awstats分析web日誌,也用Google Analytics跟蹤web訪問,通常你會看到GA的資料比Awstats統計的資料小,而且兩者相差很大,是awstats統計的問題還是google analytics的統計疏漏呢? 這是有兩種統計方法不同所造成的。
首先,我們看一下用戶數的統計。定義如下:
唯一用戶數: 用ip 位址 + ua 資訊的組合來識別不同的使用者訪問
訪問人次: 被識別的唯一使用者在最後一次頁面訪問後又間隔一定時間(30分鐘?)後再次訪問,算是該用戶的第二次訪問。
我們看到GA默認的間隔是30分鐘,而Awstats的間隔設置不同。所以導致資料統計不一樣。
接下來我們再看一下PV的統計
理論上來說awstats的資料來自于web日誌,應該比GA更為精確,但是awstats把很多中間頁面也統計了進去,造成資料的不準確。為了更精確地統計web日誌,我們看看有哪些是被awstats多統計的訪問量,並由日誌中統計出的PV量要排除掉他們:
• 1. 搜尋引擎爬蟲過來的搜尋引擎,爬蟲這些訪問不是用戶行為,應該排除
處理方法: 一般有異常IP位址的訪問量和UA資訊的判斷獲得,排除這些因素的PV量
• 2. 中間跳越網頁面中間跳越網頁面,對用戶來說只能看到跳轉後的頁面資訊,之前發起跳轉的頁面對使用者不可見,應該排除
處理方法: 找出設計中存在的跳越網頁面,排除跳轉前的頁面或跳轉後的頁面所彙集的PV量。
最好在業務設計和程式設計時做考慮處理,減少中間頁面跳轉這類的處理。
• 3. 頁面中內嵌的頁面這類是使用Frame或Div等形式,嵌在一個頁面中的一小塊資訊,
處理方法:找出這類位址,對其做訪問量排除
如果內嵌的是廣告資訊等,可以考慮單獨做分析
• 4. Ajax資料交換使用過的介面頁面這類位址一般使用者看不到,應該排除,
處理方法:找出這類ajax檔所在目錄,然後在統計量中排除對這些位址的訪問,最好在程式設計上將其放到一個目錄下,這樣可以直接排除對某個目錄的訪問。
• 5. 內部資料介面交互使用的PV這個不是針對用戶的,也應該排除
處理方法:如果是從localhost或者本地網的可以單獨過濾。對於這個方法排除後剩餘的檔,可以找出這類的位址,然後在統計量中排除對這些位址的訪問,如果能在架構設計時將其放到一個目錄下,這樣可以直接排除對這些目錄的訪問。
在awstats的設定檔中我們可以通過設置SkipFiles, SkipHosts參數防止被統計的頁面,比如我們不想統計/ajax/和/globalinclude/目錄下的檔,可以設置如下:
SkipFiles=”REGEX[^\/globalinclude\/] REGEX[^\/ajax\/] REGEX[^\/scripts] REGEX[^\/css] REGEX[^\/images] REGEX[^*\.gif]”
SkipHosts=”localhost REGEX[^192\.168\.]”
為了讓首頁的統計更精確,可以做如下設置:
DefaultFile=”index.htm index.html index.php”
如果程式設計目錄對這些方面考慮得不周全,建議從訪問量大的檔先開始過濾,相信一段時間之後,你的日誌統計就會越來越精確了。
摘自:http://www.jefflei.com/post/454.html
首先,我們看一下用戶數的統計。定義如下:
唯一用戶數: 用ip 位址 + ua 資訊的組合來識別不同的使用者訪問
訪問人次: 被識別的唯一使用者在最後一次頁面訪問後又間隔一定時間(30分鐘?)後再次訪問,算是該用戶的第二次訪問。
我們看到GA默認的間隔是30分鐘,而Awstats的間隔設置不同。所以導致資料統計不一樣。
接下來我們再看一下PV的統計
理論上來說awstats的資料來自于web日誌,應該比GA更為精確,但是awstats把很多中間頁面也統計了進去,造成資料的不準確。為了更精確地統計web日誌,我們看看有哪些是被awstats多統計的訪問量,並由日誌中統計出的PV量要排除掉他們:
• 1. 搜尋引擎爬蟲過來的搜尋引擎,爬蟲這些訪問不是用戶行為,應該排除
處理方法: 一般有異常IP位址的訪問量和UA資訊的判斷獲得,排除這些因素的PV量
• 2. 中間跳越網頁面中間跳越網頁面,對用戶來說只能看到跳轉後的頁面資訊,之前發起跳轉的頁面對使用者不可見,應該排除
處理方法: 找出設計中存在的跳越網頁面,排除跳轉前的頁面或跳轉後的頁面所彙集的PV量。
最好在業務設計和程式設計時做考慮處理,減少中間頁面跳轉這類的處理。
• 3. 頁面中內嵌的頁面這類是使用Frame或Div等形式,嵌在一個頁面中的一小塊資訊,
處理方法:找出這類位址,對其做訪問量排除
如果內嵌的是廣告資訊等,可以考慮單獨做分析
• 4. Ajax資料交換使用過的介面頁面這類位址一般使用者看不到,應該排除,
處理方法:找出這類ajax檔所在目錄,然後在統計量中排除對這些位址的訪問,最好在程式設計上將其放到一個目錄下,這樣可以直接排除對某個目錄的訪問。
• 5. 內部資料介面交互使用的PV這個不是針對用戶的,也應該排除
處理方法:如果是從localhost或者本地網的可以單獨過濾。對於這個方法排除後剩餘的檔,可以找出這類的位址,然後在統計量中排除對這些位址的訪問,如果能在架構設計時將其放到一個目錄下,這樣可以直接排除對這些目錄的訪問。
在awstats的設定檔中我們可以通過設置SkipFiles, SkipHosts參數防止被統計的頁面,比如我們不想統計/ajax/和/globalinclude/目錄下的檔,可以設置如下:
SkipFiles=”REGEX[^\/globalinclude\/] REGEX[^\/ajax\/] REGEX[^\/scripts] REGEX[^\/css] REGEX[^\/images] REGEX[^*\.gif]”
SkipHosts=”localhost REGEX[^192\.168\.]”
為了讓首頁的統計更精確,可以做如下設置:
DefaultFile=”index.htm index.html index.php”
如果程式設計目錄對這些方面考慮得不周全,建議從訪問量大的檔先開始過濾,相信一段時間之後,你的日誌統計就會越來越精確了。
摘自:http://www.jefflei.com/post/454.html
Awstats filter 過濾gif|png|jpg|js|css
要知道,載入一個頁面同時也載入了許多圖片、js、css等檔,我們假設這些訪問記錄都是在一個日誌檔中,那麼圖片的記錄就占了所有訪問記錄的80%以上。所以我們也可以過濾掉這部分的資訊,具體如下:
./awstats.pl -update -config=test -LogFile=”/bin/zcat test.log.gz |grep -v ‘.gif\|.png\|.jpg\|.js\|.css’ |”。
./awstats.pl -update -config=test -LogFile=”/bin/zcat test.log.gz |grep -v ‘.gif\|.png\|.jpg\|.js\|.css’ |”。
2009年7月15日 星期三
[Apache] 防盜連,抓圖
« SSH SCP 速度
[apache] mod cband 頻寬限制 »
[Apache] 防盜連,抓圖
Jan 18th, 2007 by appleboy 參觀者:3,109Views 機器人:1,128Views
目前管理 國史館-台灣文獻館,幾台檔案伺服器
裝了 快 1000萬的數位話檔案,如果將來對外開放,將會造成大量被下載
所以我列了下面幾個保護裝置,目前用在館內,我弄了幾個軟體去下載,果然已經被阻擋了
網頁伺服器要支援REWRITE功能
1.直接不給連
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mydomain.com/.*$ [NC]
RewriteRule \.(gif|jpg)$ - [F]
2.給你其他小檔案
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mydomain.com/.*$ [NC]
RewriteRule \.(gif|jpg)$ http://www.mydomain.com/badimage.gif [R,L]
3.擋離線瀏覽器
RewriteEngine on
# (testing purposes) RewriteCond %{HTTP_USER_AGENT} ^Mozilla* [OR]
RewriteCond %{HTTP_USER_AGENT} ^FAST\-WebCrawler* [OR]
RewriteCond %{HTTP_USER_AGENT} ^ia_archiver* [OR]
RewriteCond %{HTTP_USER_AGENT} ^Dart* [OR]
RewriteCond %{HTTP_USER_AGENT} ^Pockey* [OR]
RewriteCond %{HTTP_USER_AGENT} ^NetMechanic* [OR]
RewriteCond %{HTTP_USER_AGENT} ^SuperBot* [OR]
RewriteCond %{HTTP_USER_AGENT} ^QRVA* [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebMiner* [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebCopier* [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebDownloader* [OR]
RewriteCond %{HTTP_USER_AGENT} ^Web\ Downloader* [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebMirror* [OR]
RewriteCond %{HTTP_USER_AGENT} ^Offline* [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebZIP* [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebReaper* [OR]
RewriteCond %{HTTP_USER_AGENT} ^Anarchie* [OR]
RewriteCond %{HTTP_USER_AGENT} ^Mass\ Down* [OR]
RewriteCond %{HTTP_USER_AGENT} ^Slurp* [OR]
RewriteCond %{HTTP_USER_AGENT} ^BlackWidow* [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebStripper* [OR]
RewriteCond %{HTTP_USER_AGENT} ^Wget* [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebHook* [OR]
RewriteCond %{HTTP_USER_AGENT} ^Scooter* [OR]
RewriteCond %{HTTP_USER_AGENT} ^Teleport*
RewriteRule ^.*$ /pbourke/errors/robots.html [L]
4.不過我不想用這個,因為離線瀏覽器的名稱可以隨便給
還是擋離線軟體,不知道有沒有重複
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^BlackWidow [OR]
RewriteCond %{HTTP_USER_AGENT} ^Bot\ mailto:craftbot@yahoo.com [OR]
RewriteCond %{HTTP_USER_AGENT} ^ChinaClaw [OR]
RewriteCond %{HTTP_USER_AGENT} ^DISCo [OR]
RewriteCond %{HTTP_USER_AGENT} ^Download\ Demon [OR]
RewriteCond %{HTTP_USER_AGENT} ^eCatch [OR]
RewriteCond %{HTTP_USER_AGENT} ^EirGrabber [OR]
RewriteCond %{HTTP_USER_AGENT} ^EmailSiphon [OR]
RewriteCond %{HTTP_USER_AGENT} ^Express\ WebPictures [OR]
RewriteCond %{HTTP_USER_AGENT} ^ExtractorPro [OR]
RewriteCond %{HTTP_USER_AGENT} ^EyeNetIE [OR]
RewriteCond %{HTTP_USER_AGENT} ^FlashGet [OR]
RewriteCond %{HTTP_USER_AGENT} ^GetRight [OR]
RewriteCond %{HTTP_USER_AGENT} ^Go!Zilla [OR]
RewriteCond %{HTTP_USER_AGENT} ^Go-Ahead-Got-It [OR]
RewriteCond %{HTTP_USER_AGENT} ^GrabNet [OR]
RewriteCond %{HTTP_USER_AGENT} ^Grafula [OR]
RewriteCond %{HTTP_USER_AGENT} ^HMView [OR]
RewriteCond %{HTTP_USER_AGENT} ^HTTrack [OR]
RewriteCond %{HTTP_USER_AGENT} ^Image\ Stripper [OR]
RewriteCond %{HTTP_USER_AGENT} ^Image\ Sucker [OR]
RewriteCond %{HTTP_USER_AGENT} ^InterGET [OR]
RewriteCond %{HTTP_USER_AGENT} ^Internet\ Ninja [OR]
RewriteCond %{HTTP_USER_AGENT} ^JetCar [OR]
RewriteCond %{HTTP_USER_AGENT} ^JOC\ Web\ Spider [OR]
RewriteCond %{HTTP_USER_AGENT} ^larbin [OR]
RewriteCond %{HTTP_USER_AGENT} ^LeechFTP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Mass\ Downloader [OR]
RewriteCond %{HTTP_USER_AGENT} ^MIDown\ tool [OR]
RewriteCond %{HTTP_USER_AGENT} ^Mister\ PiX [OR]
RewriteCond %{HTTP_USER_AGENT} ^Navroad [OR]
RewriteCond %{HTTP_USER_AGENT} ^NearSite [OR]
RewriteCond %{HTTP_USER_AGENT} ^NetAnts [OR]
RewriteCond %{HTTP_USER_AGENT} ^NetSpider [OR]
RewriteCond %{HTTP_USER_AGENT} ^Net\ Vampire [OR]
RewriteCond %{HTTP_USER_AGENT} ^NetZIP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Octopus [OR]
RewriteCond %{HTTP_USER_AGENT} ^Offline\ Explorer [OR]
RewriteCond %{HTTP_USER_AGENT} ^Offline\ Navigator [OR]
RewriteCond %{HTTP_USER_AGENT} ^PageGrabber [OR]
RewriteCond %{HTTP_USER_AGENT} ^Papa\ Foto [OR]
RewriteCond %{HTTP_USER_AGENT} ^pcBrowser [OR]
RewriteCond %{HTTP_USER_AGENT} ^RealDownload [OR]
RewriteCond %{HTTP_USER_AGENT} ^ReGet [OR]
RewriteCond %{HTTP_USER_AGENT} ^Siphon [OR]
RewriteCond %{HTTP_USER_AGENT} ^SiteSnagger [OR]
RewriteCond %{HTTP_USER_AGENT} ^SmartDownload [OR]
RewriteCond %{HTTP_USER_AGENT} ^SuperBot [OR]
RewriteCond %{HTTP_USER_AGENT} ^SuperHTTP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Surfbot [OR]
RewriteCond %{HTTP_USER_AGENT} ^tAkeOut [OR]
RewriteCond %{HTTP_USER_AGENT} ^Teleport\ Pro [OR]
RewriteCond %{HTTP_USER_AGENT} ^VoidEYE [OR]
RewriteCond %{HTTP_USER_AGENT} ^Web\ Image\ Collector [OR]
RewriteCond %{HTTP_USER_AGENT} ^Web\ Sucker [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebAuto [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebCopier [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebFetch [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebReaper [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebSauger [OR]
RewriteCond %{HTTP_USER_AGENT} ^Website\ eXtractor [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebStripper [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebWhacker [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebZIP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Wget [OR]
RewriteCond %{HTTP_USER_AGENT} ^Widow [OR]
RewriteCond %{HTTP_USER_AGENT} ^Xaldon\ WebSpider [OR]
RewriteCond %{HTTP_USER_AGENT} ^Zeus
RewriteRule ^.*$ /error.php [L]
RewriteRule ^.*$ http://www.site-where-you-want-to-send-the-bot [L,R]
另外一種方法
SetEnvIfNoCase Referer "^http://220\.134\.208\.55/" local_ref=1
SetEnvIfNoCase Referer "^http://hi17168\.calling\.com\.tw/" local_ref=1
Order Allow,Deny
Allow from env=local_ref
Allow from 127.0.0.1
http://www.webmasterworld.com/forum13/687-4-10.htm
Alias /old_image "D:\Big_img"
Options -Indexes
SetEnvIfNoCase Referer "^http://192\.168\.100\.244/old_dar/" local_ref=1
SetEnvIfNoCase Referer "^http://163\.29\.208\.22/old_dar/" local_ref=1
Order Allow,Deny
Allow from env=local_ref
Allow from 127.0.0.1
Allow from 192.168.100.244
Allow from 163.29.208.22
參考:
網站一
網站二
摘自:http://blog.wu-boy.com/2007/01/18/63/
[apache] mod cband 頻寬限制 »
[Apache] 防盜連,抓圖
Jan 18th, 2007 by appleboy 參觀者:3,109Views 機器人:1,128Views
目前管理 國史館-台灣文獻館,幾台檔案伺服器
裝了 快 1000萬的數位話檔案,如果將來對外開放,將會造成大量被下載
所以我列了下面幾個保護裝置,目前用在館內,我弄了幾個軟體去下載,果然已經被阻擋了
網頁伺服器要支援REWRITE功能
1.直接不給連
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mydomain.com/.*$ [NC]
RewriteRule \.(gif|jpg)$ - [F]
2.給你其他小檔案
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mydomain.com/.*$ [NC]
RewriteRule \.(gif|jpg)$ http://www.mydomain.com/badimage.gif [R,L]
3.擋離線瀏覽器
RewriteEngine on
# (testing purposes) RewriteCond %{HTTP_USER_AGENT} ^Mozilla* [OR]
RewriteCond %{HTTP_USER_AGENT} ^FAST\-WebCrawler* [OR]
RewriteCond %{HTTP_USER_AGENT} ^ia_archiver* [OR]
RewriteCond %{HTTP_USER_AGENT} ^Dart* [OR]
RewriteCond %{HTTP_USER_AGENT} ^Pockey* [OR]
RewriteCond %{HTTP_USER_AGENT} ^NetMechanic* [OR]
RewriteCond %{HTTP_USER_AGENT} ^SuperBot* [OR]
RewriteCond %{HTTP_USER_AGENT} ^QRVA* [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebMiner* [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebCopier* [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebDownloader* [OR]
RewriteCond %{HTTP_USER_AGENT} ^Web\ Downloader* [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebMirror* [OR]
RewriteCond %{HTTP_USER_AGENT} ^Offline* [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebZIP* [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebReaper* [OR]
RewriteCond %{HTTP_USER_AGENT} ^Anarchie* [OR]
RewriteCond %{HTTP_USER_AGENT} ^Mass\ Down* [OR]
RewriteCond %{HTTP_USER_AGENT} ^Slurp* [OR]
RewriteCond %{HTTP_USER_AGENT} ^BlackWidow* [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebStripper* [OR]
RewriteCond %{HTTP_USER_AGENT} ^Wget* [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebHook* [OR]
RewriteCond %{HTTP_USER_AGENT} ^Scooter* [OR]
RewriteCond %{HTTP_USER_AGENT} ^Teleport*
RewriteRule ^.*$ /pbourke/errors/robots.html [L]
4.不過我不想用這個,因為離線瀏覽器的名稱可以隨便給
還是擋離線軟體,不知道有沒有重複
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^BlackWidow [OR]
RewriteCond %{HTTP_USER_AGENT} ^Bot\ mailto:craftbot@yahoo.com [OR]
RewriteCond %{HTTP_USER_AGENT} ^ChinaClaw [OR]
RewriteCond %{HTTP_USER_AGENT} ^DISCo [OR]
RewriteCond %{HTTP_USER_AGENT} ^Download\ Demon [OR]
RewriteCond %{HTTP_USER_AGENT} ^eCatch [OR]
RewriteCond %{HTTP_USER_AGENT} ^EirGrabber [OR]
RewriteCond %{HTTP_USER_AGENT} ^EmailSiphon [OR]
RewriteCond %{HTTP_USER_AGENT} ^Express\ WebPictures [OR]
RewriteCond %{HTTP_USER_AGENT} ^ExtractorPro [OR]
RewriteCond %{HTTP_USER_AGENT} ^EyeNetIE [OR]
RewriteCond %{HTTP_USER_AGENT} ^FlashGet [OR]
RewriteCond %{HTTP_USER_AGENT} ^GetRight [OR]
RewriteCond %{HTTP_USER_AGENT} ^Go!Zilla [OR]
RewriteCond %{HTTP_USER_AGENT} ^Go-Ahead-Got-It [OR]
RewriteCond %{HTTP_USER_AGENT} ^GrabNet [OR]
RewriteCond %{HTTP_USER_AGENT} ^Grafula [OR]
RewriteCond %{HTTP_USER_AGENT} ^HMView [OR]
RewriteCond %{HTTP_USER_AGENT} ^HTTrack [OR]
RewriteCond %{HTTP_USER_AGENT} ^Image\ Stripper [OR]
RewriteCond %{HTTP_USER_AGENT} ^Image\ Sucker [OR]
RewriteCond %{HTTP_USER_AGENT} ^InterGET [OR]
RewriteCond %{HTTP_USER_AGENT} ^Internet\ Ninja [OR]
RewriteCond %{HTTP_USER_AGENT} ^JetCar [OR]
RewriteCond %{HTTP_USER_AGENT} ^JOC\ Web\ Spider [OR]
RewriteCond %{HTTP_USER_AGENT} ^larbin [OR]
RewriteCond %{HTTP_USER_AGENT} ^LeechFTP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Mass\ Downloader [OR]
RewriteCond %{HTTP_USER_AGENT} ^MIDown\ tool [OR]
RewriteCond %{HTTP_USER_AGENT} ^Mister\ PiX [OR]
RewriteCond %{HTTP_USER_AGENT} ^Navroad [OR]
RewriteCond %{HTTP_USER_AGENT} ^NearSite [OR]
RewriteCond %{HTTP_USER_AGENT} ^NetAnts [OR]
RewriteCond %{HTTP_USER_AGENT} ^NetSpider [OR]
RewriteCond %{HTTP_USER_AGENT} ^Net\ Vampire [OR]
RewriteCond %{HTTP_USER_AGENT} ^NetZIP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Octopus [OR]
RewriteCond %{HTTP_USER_AGENT} ^Offline\ Explorer [OR]
RewriteCond %{HTTP_USER_AGENT} ^Offline\ Navigator [OR]
RewriteCond %{HTTP_USER_AGENT} ^PageGrabber [OR]
RewriteCond %{HTTP_USER_AGENT} ^Papa\ Foto [OR]
RewriteCond %{HTTP_USER_AGENT} ^pcBrowser [OR]
RewriteCond %{HTTP_USER_AGENT} ^RealDownload [OR]
RewriteCond %{HTTP_USER_AGENT} ^ReGet [OR]
RewriteCond %{HTTP_USER_AGENT} ^Siphon [OR]
RewriteCond %{HTTP_USER_AGENT} ^SiteSnagger [OR]
RewriteCond %{HTTP_USER_AGENT} ^SmartDownload [OR]
RewriteCond %{HTTP_USER_AGENT} ^SuperBot [OR]
RewriteCond %{HTTP_USER_AGENT} ^SuperHTTP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Surfbot [OR]
RewriteCond %{HTTP_USER_AGENT} ^tAkeOut [OR]
RewriteCond %{HTTP_USER_AGENT} ^Teleport\ Pro [OR]
RewriteCond %{HTTP_USER_AGENT} ^VoidEYE [OR]
RewriteCond %{HTTP_USER_AGENT} ^Web\ Image\ Collector [OR]
RewriteCond %{HTTP_USER_AGENT} ^Web\ Sucker [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebAuto [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebCopier [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebFetch [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebReaper [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebSauger [OR]
RewriteCond %{HTTP_USER_AGENT} ^Website\ eXtractor [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebStripper [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebWhacker [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebZIP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Wget [OR]
RewriteCond %{HTTP_USER_AGENT} ^Widow [OR]
RewriteCond %{HTTP_USER_AGENT} ^Xaldon\ WebSpider [OR]
RewriteCond %{HTTP_USER_AGENT} ^Zeus
RewriteRule ^.*$ /error.php [L]
RewriteRule ^.*$ http://www.site-where-you-want-to-send-the-bot [L,R]
另外一種方法
SetEnvIfNoCase Referer "^http://220\.134\.208\.55/" local_ref=1
SetEnvIfNoCase Referer "^http://hi17168\.calling\.com\.tw/" local_ref=1
Order Allow,Deny
Allow from env=local_ref
Allow from 127.0.0.1
http://www.webmasterworld.com/forum13/687-4-10.htm
Alias /old_image "D:\Big_img"
Options -Indexes
SetEnvIfNoCase Referer "^http://192\.168\.100\.244/old_dar/" local_ref=1
SetEnvIfNoCase Referer "^http://163\.29\.208\.22/old_dar/" local_ref=1
Order Allow,Deny
Allow from env=local_ref
Allow from 127.0.0.1
Allow from 192.168.100.244
Allow from 163.29.208.22
參考:
網站一
網站二
摘自:http://blog.wu-boy.com/2007/01/18/63/
2009年4月15日 星期三
[DEBUG]Apache Error: Client denied by server configuration
AllowOverride None
Order Deny,Allow
Deny from all
to
AllowOverride None
Order Deny,Allow
#Deny from all
Order Deny,Allow
Deny from all
to
AllowOverride None
Order Deny,Allow
#Deny from all
Running two httpd in Linux
#./configure --prefix=/opt/httpd-2.2.11 --enable-modules=all --enable-mods-shared=all --enable-proxy --enable-ssl --enable-so --with-mpm=prefork
#make
#make install
#ln -s /opt/httpd-2.2.11 /opt/httpd
#cp -p pathLib/libphp5.so /opt/httpd/modules
#vi /opt/httpd/conf/httpd.conf
#/opt/httpd/bin/httpd -f /opt/httpd/conf/httpd.conf -k restart
#make
#make install
#ln -s /opt/httpd-2.2.11 /opt/httpd
#cp -p pathLib/libphp5.so /opt/httpd/modules
#vi /opt/httpd/conf/httpd.conf
# Make sure there's only **1** line for each of these 2 directives:
# Use for PHP 4.x:
#LoadModule php4_module modules/libphp4.so
#AddHandler php-script php
# Use for PHP 5.x:
LoadModule php5_module modules/libphp5.so
AddHandler php5-script php
# Add index.php to your DirectoryIndex line:
DirectoryIndex index.html index.php
AddType text/html php
# PHP Syntax Coloring
# (optional but useful for reading PHP source for debugging):
AddType application/x-httpd-php-source phps
#/opt/httpd/bin/httpd -f /opt/httpd/conf/httpd.conf -k restart
訂閱:
文章 (Atom)