【PHP 】伪静态 - 4. 实际运用
偽靜態(tài)的實(shí)際運(yùn)用
1. 在一個(gè)項(xiàng)目中有兩個(gè)文件夾,public和private, public文件夾的圖片可以被所有人訪問,private只能被自己訪問。如何實(shí)現(xiàn)?
第一個(gè)方法是:
在public和private下創(chuàng)建.htaccess文件,對(duì)于private只讓127.0.0.1訪問,public文件夾都可以訪問。
private文件夾下的配置
| order deny,allow????? #注意deny,allow中間不能由空格 deny from all allow from 127.0.0.1 |
?
這個(gè)的缺點(diǎn)是,沒有辦法去控制本apache的另外一個(gè)虛擬主機(jī)的請(qǐng)求。
另外這個(gè)不夠精細(xì)化,他會(huì)封殺所有的資源,不僅僅是圖片。
于是我們就換一個(gè)思路,使用http的referer的防盜鏈技術(shù)。
?
第二個(gè)方法是:
在private文件夾下寫一個(gè).htaccess文件
| <ifModule rewrite_module> RewriteEngine On # RewriteCond:滿足某個(gè)條件則放行,不被RewriteRule束縛 # HTTP協(xié)議,如果是外網(wǎng)來的必須帶一個(gè)Referer # 如果請(qǐng)求頭不是hsp.fi就封殺 # 但是可以自己模擬一個(gè)http請(qǐng)求頭,這樣就可以取出圖片! RewriteCond %{HTTP_REFERER} !hsp.fi #[F] - Forbidden, 如果請(qǐng)求的是jpg圖片,則禁用 RewriteRule .*\.jpg -[F] RewriteRule .*\.css -[F] RewriteRule .*\.js -[F] </ifModule> |
?
注意:如果RewriteCond有多個(gè)條件則:
| <ifModule rewrite_module> RewriteEngine On # RewriteCond:滿足某個(gè)條件則放行,不被RewriteRule束縛 # HTTP協(xié)議,如果是外網(wǎng)來的必須帶一個(gè)Referer # 如果請(qǐng)求頭不是hsp.fi就封殺 # 但是可以自己模擬一個(gè)http請(qǐng)求頭,這樣就可以取出圖片! RewriteCond %{HTTP_REFERER} !hsp.fi RewriteCond %{HTTP_FILENAME} !-f #[F] - Forbidden, 如果請(qǐng)求的是jpg圖片,則禁用 RewriteRule .*\.jpg -[F] RewriteRule .*\.css -[F] RewriteRule .*\.js -[F] ? #可以配置多份 RewriteCond %{HTTP_REFERER} !hsp2.fi RewriteRule .*\.jpg -[F] ? </ifModule> |
?
課堂練習(xí):
配置一個(gè)網(wǎng)站.answer.fi
配置網(wǎng)站的歡迎頁面,404,rewrite,public,private圖片的控制
| 1. 配置vhost, 注意allowoverwrite all |
| 2. 配置host |
| 3. 建一個(gè)文件夾answer |
| 4. 創(chuàng)建error, public, private目錄,和welcome.html, .htaccess文件 ? .htaccess文件中的配置 ? Allow from All #配置首頁面 DirectoryIndex welcome.html errorDocument 404 /error/404.html |
| 5. 在error目錄下放404.html頁面 |
| 6. 在public目錄下做配置 ? Allow from all |
| 7. 在private目錄下做配置 ? <ifModule rewrite_module> RewriteEngine On RewriteCond %{HTTP_REFERER} !answer.fi RewriteRule .*\.jpg -[F] </ifModule> |
?
補(bǔ)充說明:
1. 關(guān)于404的說明:
對(duì)于ie瀏覽器而言,404頁面的內(nèi)容大小不能低于512b字節(jié)。
2. 如果在<Directory>節(jié)點(diǎn)配置了 Options Indexes,同時(shí)你又啟用了rewriteEngine On你會(huì)看到403的提示. 原因是因?yàn)槲覀兊母讣?jí)目錄的Options 本身就配好了 Options Indexes FollowSymLinks,
我們要不不配置要么就平配一樣的,重寫一遍。
?
偽靜態(tài)實(shí)際運(yùn)用2:
?
實(shí)現(xiàn):
RewriteRule ([a-zA-Z_]+)\/([a-zA-Z]+) index.php?c=$1&a=$2
?
運(yùn)用3:
rewriteCond指令的介紹
如何做到,當(dāng)abc.html存在就直接訪問abc.html, 否則就去訪問index.php?
| #如果請(qǐng)求的abc.html不是一個(gè)文件就走index, 如果是一個(gè)文件就不走過濾機(jī)制 RewriteCond %{REQUEST_FILENAME} !-f #并且不是一個(gè)目錄 RewriteCond %{REQUEST_FILENAME} !-d RewriteRule abc.html index.php |
?
偽靜態(tài)實(shí)際運(yùn)用4:
在TP框架中使用rewrite簡(jiǎn)化url地址,目的是seo,步驟:
轉(zhuǎn)載于:https://www.cnblogs.com/Answer1215/p/3151480.html
總結(jié)
以上是生活随笔為你收集整理的【PHP 】伪静态 - 4. 实际运用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Struts2运行机制(MVC)的分析:
- 下一篇: php 自带过滤和转义函数