## 簡述
.htaccess文件(或者"分布式配置文件")提供了針對目錄改變配置的方法, 即,在一個特定的文檔目錄中放置一個包含一個或多個指令的文件, 以作用于此目錄及其所有子目錄。作為用戶,所能使用的命令受到限制。管理員可以通過Apache的AllowOverride指令來設置。
Unix、Linux系統或者是任何版本的Apache Web服務器都是支持.htaccess的,但是有的主機服務商可能不允許你自定義自己的.htaccess文件。
啟用.htaccess,需要修改httpd.conf,啟用AllowOverride,并可以用AllowOverride限制特定命令的使用。如果需要使用.htaccess以外的其他文件名,可以用AccessFileName指令來改變。例如,需要使用.config ,則可以在服務器配置文件中按以下方法配置:AccessFileName .config 。
籠統地說,.htaccess可以幫我們實現包括:**文件夾密碼保護、用戶自動重定向、自定義錯誤頁面、改變你的文件擴展名、封禁特定IP地址的用戶、只允許特定IP地址的用戶、禁止目錄列表,以及使用其他文件作為index文件等一些功能。**
## 寫法規則
DirectoryIndex zxg.html #改變默認文件
RewriteEngine On #打開或關閉運行時刻的重寫引擎,設置位置:服務器配置, 虛擬主機, 目錄.htaccess
'-d' (是一個目錄[directory])
將TestString視為一個路徑名并測試它是否存在而且是一個目錄
'-f' (是一個常規的文件[file])
將TestString視為一個路徑名并測試它是否存在而且是一個常規的文件
'-l' (是一個符號連接[link])
將TestString視為一個路徑名并測試它是否存在而且是一個符號連接
redirect|R [=HttpCode] (強制重定向 redirect)
(使新的URL成為一個URI) 為前綴的Substitution可以強制性執行一個外部重定向。
如果code沒有指定,則產生一個HTTP響應代碼302(臨時性移動)。
注意: 在使用這個標記時,必須確保該替換字段是一個有效的URL
last|L (最后一個Url規則的重寫last)
立即停止重寫操作,并不再應用其他重寫規則。這個標記可以阻止當前已被重寫的URL為其后繼的規則所重寫
'forbidden|F' (強制URL為被禁止的 forbidden)
強制當前URL為被禁止的,即,立即反饋一個HTTP響應代碼403(被禁止的)
'nocase|NC' (忽略大小寫 no case)它使Pattern忽略大小寫,即, 在Pattern與當前URL匹配時,'A-Z' 和'a-z'沒有區別。
## 綜合示例
```
#注意,#只能放在句首,下面句尾的#實際應用要刪除掉
#改變默認文件
DirectoryIndex zxg.html
#偽靜態
RewriteEngine On #打開或關閉運行時刻的重寫引擎,設置位置:服務器配置, 虛擬主機, 目錄.htaccess
ReWriteRule ^(\d+)_(\d+)\.html news.php?cid=$1&aid=$2 [NC,R=301,L] #301定向,不區分大小寫
#訪問的不是一個文件或目錄的時候就跳轉到一個404.html
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
ReWriteRule .* 404.html [L]
#去掉index.php
RewriteCond $1 !^(index\.php|images|robots\.txt) #任何非 index.php、images 和 robots.txt 的 HTTP 請求都被指向 index.php。
RewriteRule ^(.*)$ /index.php/$1 [L]
#防盜鏈
RewriteCond %{HTTP_REFERER} !^$ #如果來源地址不為空
RewriteCond %{HTTP_REFERER} !^http://web1.com #如果不是以http://web1.com開頭
RewriteCond %{REQUEST_FILENAME} .*\.(jpg|jpeg|gif|png) [NC] #如果訪問的是圖片
ReWriteRule .* no.png [L] #就定向到no.png上面去
```
1.注意它的順序是從上到下,符合某一條件就不走下面條件;所以在寫偽靜態的時候要考慮這個先后順序;
2.#注釋號只能放在句首,不能放在句尾;
3.不需要重啟Apache,立即生效;
- Apache
- 【Apache運維基礎(1)】Apache的安裝與使用
- 【Apache運維基礎(2)】主配置文件說明
- 【Apache運維基礎(3)】虛擬主機配置說明
- 【Apache運維基礎(4)】Apache的Rewrite攻略(1)
- 【Apache運維基礎(5)】Apache的Rewrite攻略(2).htaccess文件
- 【Apache運維基礎(6)】Apache的日志管理與分析
- 工具篇
- supervisor進程管理器
- Haproxy安裝與配置
- Nginx
- 【nginx網站性能優化篇(1)】gzip壓縮與expire瀏覽器緩存
- 【nginx網站性能優化篇(2)】反向代理實現Apache與Nginx的動靜分離(LNMPA)
- 【nginx網站性能優化篇(3)】反向代理實現負載均衡
- 【nginx網站性能優化篇(4)】理解nginx的高并發原理及其配置調優
- 【nginx運維基礎(1)】Nginx的編譯安裝與使用
- 【nginx運維基礎(2)】Nginx的配置文件說明及虛擬主機配置示例
- 【nginx運維基礎(3)】Nginx的編譯PHP
- 【nginx運維基礎(4)】Nginx的日志管理(日志格式與定時分割日志)
- 【nginx運維基礎(5)】Nginx的location攻略
- 【nginx運維基礎(6)】Nginx的Rewrite語法詳解
- 【nginx運維基礎(7)】配置SSL支持https訪問
- 【nginx運維基礎(8)】配置支持http2協議
- 【nginx運維基礎(9)】了解PHP-FPM 與 Nginx 的通信機制
- 其它
- Apache與Nginx下php隱藏http頭部版本信息的實現方法
- CURL與PHP-CLI的應用【CLI篇】
- CURL與PHP-CLI的應用【Curl篇】
- Linux之SAMBA共享服務
- 【Linux常識篇(1)】所謂的正向代理與反向代理
- 【Linux常識篇(2)】理解inode
- 【Linux常識篇(3)】文件及文件夾的ctime atime mtime的含義詳解
- centOS使用手記
- 服務器日志分析
- 高頻命令
- df
- mv
- gzip
- cp
- tar
- touch
- cat
- uniq
- nl
- more
- rmdir
- less
- mkdir
- head
- rm
- tail
- 五大查詢命令
- vi&vim
- ls與目錄結構
- grep
- awk
- sed
- 其他高頻命令