htaccess的重寫規則

2022-09-17 20:21:14 字數 2087 閱讀 8866

.htaccess是apache伺服器的乙個非常強大的分布式配置檔案。

正確的理解和使用.htaccess檔案,可以幫助我們優化自己的伺服器或者虛擬主機。

以windows為例,進入apache/conf目錄,找到httpd.conf檔案,去掉

loadmodule rewrite_module modules/mod_rewrite.so

前面的#,然後設定目錄屬性allowoverride all,重啟apache即可

下面是乙個典型的htaccess檔案

# 開啟url重寫

rewriteengine on

# url重寫的作用域

# rewritebase /path/to/url

# 滿足怎樣的條件

rewritecond % !^www\.example\.com$ [nc]

# 應用怎樣的規則

rewriterule .? [r=301,l]

來看看rewritecond,首先有乙個%,因為是乙個apache變數,需要用%來指示。從!開始就是匹配的條件,支援 正則。!表示不等於,這句話的意思就是:如果http_host不是www.example.com。後面的[nc](no case)表示忽略大小寫,常見的還有

防盜煉

由於是基於http_referer的驗證,所以只能防止一般的盜鏈,因為http_referer是比較容易偽造的

自定義404錯誤頁面

如果使用者輸入了乙個不存在的url,那麼就顯示自定義的錯誤頁面

errordocument 404 /404.html

# 其他同理

errordocument 500 /500.html

處理移動過的檔案

redirect 301 /old.html 

# 也可以是下面這樣

rewriterule /old.html [r=301,l]

# 如果想隱式跳轉(url位址不變,但實際上內容是其他url的),就使用下面的

rewriterule /old.html [l]

對於rewriterule還有好多文章可以做,比如

# 把html字尾的url鏈結到php檔案

# $1指代的是前面第1個用括號括起來的內容

rewriterule ^/?([a-z/]+)\.html$ $1.php [l]

# 或者把舊資料夾的內容鏈結到新資料夾

rewriterule ^/?old_directory/([a-z/.]+)$ new_directory/$1 [r=301,l]

# 隱藏檔名

rewriterule ^/?([a-z]+)$ $1.php [l]

如果目錄裡沒有index檔案,又沒有對該目錄做過特別的處理,尤其是windows主機,那麼該目錄裡的內容就會顯示出來,這時可以在根目錄建立 乙個.htaccess檔案,然後寫上

options -indexes

# 就這麼一句就搞定了

阻止/允許特定ip/ip段

# 禁止所有ip,除了指定的

order deny,allow

deny from all

# 如果想允許ip段,如123.123.123.0 ~ 123.123.123.255,則

# allow from 123.123.123.

allow from 123.123.123.123

errordocument 403 /page.html

allow from all

#如果想禁止特定ip

deny from 123.123.123.123

新增mime型別

apache重寫htaccess檔案 問題

php模組方式重寫 options followsymlinks rewriteengine on rewritecond d rewritecond f rewriterule index.php 1 qsa,pt,l ifmodule php由fastcgi模式重寫格式 options foll...

用 htaccess檔案實現URL重寫

你是否曾經對一些 的 看起來非常清爽,沒有任何.php或.html字尾感到奇怪?他們就是這樣做到的。1 安裝 mod rewrite 模組 因為 apache 伺服器預設是沒有開啟 mod rewrite 模組的,所以我們必須手動來啟動。開啟 apache 的配置檔案 httpd.conf 檔案,找...

PHP實現url重寫和 htaccess

htaccess是乙個完整的檔名 只有字尾 它是用於apache伺服器下的配置檔案,當.htaccess檔案放在某一資料夾下,它僅對該資料夾下的檔案和資料夾有效。通過.htaccess檔案,可以配置伺服器實現很多功能,比如錯誤定位,密碼保護,ip拒絕,url重寫等等。預設的apache不支援.hta...