首頁 後端開發 php教程 講解RewriteCond和13個mod_rewrite應用舉例Apache偽靜態 的相關知識

講解RewriteCond和13個mod_rewrite應用舉例Apache偽靜態 的相關知識

Jun 11, 2018 am 10:58 AM

1.給子網域加上www標記 
RewriteCond %{HTTP_HOST} ^([a-z.] )?example\.com$ [NC] 
#RewriteCond %{HTTP_HOST} !^www\. [ NC] 
RewriteRule .? http://www.xample.com%{REQUEST_URI} [R=301,L] 
這個規則抓取二級域名的%1變量,如果不是以www開始,那麼就加www,以前的網域以及{REQUEST_URI}會跟在其後。
2.去掉網域的www標記 
RewriteCond %{HTTP_HOST} !^example\.com$ [NC] 
RewriteRule .? http://example.com%{REQUEST_URI} [R= 301,L] 
3.去掉www標記,但儲存子網域 
RewriteCond %{HTTP_HOST} ^www\.(([a-z0-9_] \.)?example\.com) $ [NC] 
RewriteRule .? http://%1%{REQUEST_URI} [R=301,L] 
這裡,當配對到1%變數以後,子網域才會在%2(內部原子)中抓取到,而我們需要的正是這個%1變數。 
4.防止圖片盜鏈
一些站長不擇手段的將你的圖片盜鏈在他們網站上,耗費你的頻寬。你可以加一下程式碼來阻止這種行為。
RewriteCond %{HTTP_REFERER} !^$ 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?example\.com/ [NC] 
RewriteRule \.(gif|jpg| png)$ - [F] 
如果{HTTP_REFERER}值不為空,或者不是來自你自己的域名,這個規則用[F]FLAG阻止以gif|jpg|png 結尾的URL 
如果對這種盜鏈你是堅決鄙視的,你還可以改變圖片,讓訪問盜鏈網站的用戶知道該網站正在盜用你的圖片。
RewriteCond %{HTTP_REFERER} !^$ 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?example\.com/.*$ [NC] 
RewriteRule \.(gif |jpg|png)$ 你的圖片地址[R=301,L] 
除了阻止圖片盜鏈鏈接,以上規則將其盜鏈的圖片全部替換成了你設置的圖片。
你也可以阻止特定網域盜鏈你的圖片: 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?leech_site\.com/ [NC] 
RewriteRule \.( gif|jpg|png)$ - [F,L] 
這個規則將阻止網域名稱黑名單上所有的圖片連結請求。 
當然以上這些規則都是以{HTTP_REFERER}取得網域為基礎的,如果你想改用成IP位址,用{REMOTE_ADDR}就可以了。
5.如果檔案不存在重定向到404頁面 
如果你的主機沒有提供404頁面重定向服務,那麼我們自己創建。
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule .? /404.php [L] 
這裡-f匹配的是存在的檔案名稱,- d符合的存在的路徑名。這段程式碼在進行404重定向之前,會判斷你的檔案名稱以及路徑名稱是否存在。你也可以在404頁加上一個?url=$1參數: 
RewriteRule ^/?(.*)$ /404.php?url=$1 [L] 
這樣,你的404頁面就可以做一些其他的事情,例如默認信心,發一個郵件提醒,加一個搜索,等等。
6.重新命名目錄 
如果你想在網站上重新命名目錄,試試看這個: 
RewriteRule ^/?old_directory/([a-z/.] )$ new_directory/$1 [R=301 ,L] 
在規則裡我添加了一個“.”(注意不是代表得所有字符,前面有轉義符)來匹配文件的後綴名。 
7.將.html後綴名轉換成.php 
前提是.html檔案能繼續造訪的情況下,更新你的網站連結。 
RewriteRule ^/?([a-z/] )\.html$ $1.php [L] 
這不是一個網頁重定向,所以訪客是看不見的。讓他作為一個永久重定向(可見的),將FLAG修改[R=301,L]。 
8.建立無檔案後綴名連結 
如果你想讓你的PHP網站的連結更簡潔易記-或隱藏檔案的字尾名,試試這個: 
RewriteRule ^/?([ a-z] )$ $1.php [L] 
如果網站混有PHP以及HTML文件,你可以用RewriteCond先判斷該後綴的文件是否存在,然後進行替換: 
RewriteCond %{REQUEST_FILENAME}.php - f 
RewriteRule ^/?([a-zA-Z0-9] )$ $1.php [L] 
RewriteCond %{REQUEST_FILENAME}.html -f 
RewriteRule ^/?([a-zA -Z0-9] )$ $1.html [L] 
如果檔案是以.php為後綴,這條規則將會被執行。
9.檢查查詢變數裡的特定參數 
如果在URL裡面有一個特殊的參數,你可用RewriteCond鑑別其是否存在: 
RewriteCond %{QUERY_STRING} !uniquekey= 
RewriteRule ^/?script_that_requires_uniquekey\.php$ other_script.php [QSA,L php
以上規則將檢查{QUERY_STRING}裡面的uniquekey參數是否存在,如果{REQUEST_URI}值為script_that_requires_uniquekey,將會定向到新的URL。 
10.刪除查詢變數 
Apache的mod_rewrite模組會自動辨識查詢變量,除非你做了以下改變: 
a).指派新的查詢參數(你可以用[QSA,L] FLAG保存最初的查詢變數) 
b).在檔案名稱後面加上一個「?」(例如index.php?)。符號「?」不會在瀏覽器的網址列顯示。
11.用新的格式展示目前URI 
如果這就是我們目前正在運行的URLs:/index.php?id=nnnn。我們非常希望將其更改成/nnnn並且讓搜尋引擎以新格式展現。首先,我們為了讓搜尋引擎更新成新的,得將舊的URLs重定向到新的格式,但是,我們還得保證以前的index.php照樣能夠運作。是不是被我搞迷糊了? 
實現上述功能,訣竅就在於查詢變數加了一個訪客看不到的標記符號「marker」。我們只將查詢變數中沒有出現「marker」標記的連結進行重定向,然後將原有的連結替換成新的格式,並且透過[QSA]FLAG在已有的參數加上一個「marker」標記。以下為實現的方式: 
RewriteCond %{QUERY_STRING} !marker 
RewriteCond %{QUERY_STRING} id=([-a-zA-Z0-9_ ] ) 
RewriteRule ^/?index\.php$ %1? [R=301,L] 
RewriteRule ^/?([-a-zA-Z0-9_ ] )$ index.php?marker &id=$1 [L]
這裡,原先的URL: http://www.example.com/index.php?id=nnnn,不包含marker,所以被第一個規則永久重定向到http://www.example.com/nnnn,第二個規則將http ://www.example.com/nnnn反定向到http://www.example.com/index.php?marker&id=nnnn,並且加了marker以及id=nnnn兩個變量,最後mod_rewrite就開始進行處理過程。
第二次匹配,marker被匹配,所以忽略第一條規則,這裡有一個“.”字符會出現在http://www.example.com/index.php?marker &id=nnnn中,所以第二條規則也會被忽略,這樣我們就完成了。
注意,這個解決方案要求Apache的一些擴充功能,所以如果你的網站放於在共享主機中會遇到很多障礙。
12.確保安全服務啟用 
Apache可以用兩種方法來辨別你是否開啟了安全服務,分別引用{HTTPS}和{SERVER_PORT}變數: 
RewriteCond %{ REQUEST_URI} ^secure_page\.php$ 
RewriteCond %{HTTPS} !on 
RewriteRule ^/?(secure_page\.php)$ https://www.example.com/$1 [R=301,L]
以上規則測試{REQUEST_URI}值是否等於我們的安全頁碼,且{HTTPS}不等於on。如果這兩個條件同時滿足,請求將被重定向到安全服務URI.另外你可用{SERVER_PORT}做同樣的測試,443是常用的安全服務端口 
RewriteCond %{REQUEST_URI} ^secure_page\.php$
RewriteCond %{SERVER_PORT} !^443$ 
RewriteRule ^/?(secure_page\.php)$ https://www.example.com/$1 [R=301,L]
13.在特定的頁面上強制執行安全服務 
遇到同一個伺服器根目錄下分別有一個安全服務域名和一個非安全服務域名,所以你就需要用RewriteCond 判斷安全服務端口是否佔用,並且只將以下清單的頁面要求為安全服務: 
RewriteCond %{SERVER_PORT} !^443$ 
RewriteRule ^/?(page1|page2|page3|page4|page5)$ https://www .example.com/%1[R=301,L] 
以下是如何將沒有設定成安全服務的頁面回到80埠: 
RewriteCond %{ SERVER_PORT } ^443$ 
RewriteRule !^ /?(page6|page7|page8|page9)$http://www.example.com%{REQUEST_URI} [R=301,L]
  

#本文解說了RewriteCond與13個mod_rewrite應用舉例Apache偽靜態的相關知識,更多相關內容請關注php中文網。

相關推薦:

了解正向代理與反向代理的差異

如何使用Apache 建構虛擬主機

#如何透過sh memcached 進程啟動及監控

#

以上是講解RewriteCond和13個mod_rewrite應用舉例Apache偽靜態 的相關知識的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1666
14
CakePHP 教程
1425
52
Laravel 教程
1325
25
PHP教程
1273
29
C# 教程
1252
24
說明PHP中的安全密碼散列(例如,password_hash,password_verify)。為什麼不使用MD5或SHA1? 說明PHP中的安全密碼散列(例如,password_hash,password_verify)。為什麼不使用MD5或SHA1? Apr 17, 2025 am 12:06 AM

在PHP中,應使用password_hash和password_verify函數實現安全的密碼哈希處理,不應使用MD5或SHA1。1)password_hash生成包含鹽值的哈希,增強安全性。 2)password_verify驗證密碼,通過比較哈希值確保安全。 3)MD5和SHA1易受攻擊且缺乏鹽值,不適合現代密碼安全。

PHP和Python:比較兩種流行的編程語言 PHP和Python:比較兩種流行的編程語言 Apr 14, 2025 am 12:13 AM

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP行動:現實世界中的示例和應用程序 PHP行動:現實世界中的示例和應用程序 Apr 14, 2025 am 12:19 AM

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP:網絡開發的關鍵語言 PHP:網絡開發的關鍵語言 Apr 13, 2025 am 12:08 AM

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP類型提示如何起作用,包括標量類型,返回類型,聯合類型和無效類型? PHP類型提示如何起作用,包括標量類型,返回類型,聯合類型和無效類型? Apr 17, 2025 am 12:25 AM

PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。

PHP的持久相關性:它還活著嗎? PHP的持久相關性:它還活著嗎? Apr 14, 2025 am 12:12 AM

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

PHP和Python:代碼示例和比較 PHP和Python:代碼示例和比較 Apr 15, 2025 am 12:07 AM

PHP和Python各有優劣,選擇取決於項目需求和個人偏好。 1.PHP適合快速開發和維護大型Web應用。 2.Python在數據科學和機器學習領域佔據主導地位。

PHP與其他語言:比較 PHP與其他語言:比較 Apr 13, 2025 am 12:19 AM

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

See all articles