APACHE 重寫規則(mod_rewrite)

看了一些關于.htaccess,apache重寫url的規則,一般都寫得很清楚。但是對于我一個小白,感覺要挖的東西挺多的,并不能滿足我的需求。于是就追著apache的文檔中的mod_rewrite查看,講得很清楚。
當然,除了在.htaccess中配置相關的重寫規則,也可以在apache的httpd.conf或者虛擬主機配置httpd-vhosts.conf中配置,參考官方例子如下:

邊截圖邊解釋一下,基于我自己的英文翻譯和理解,如有不同之處請按照你們自己的理解。

1. apache mod_rewrite 模塊介紹

對于重寫模塊,相信都不陌生,一般的web項目都會用到url重定向,這就需要使用mod_rewrite的模塊,在.htaccess文件來完成。
首先,開啟apache的mod_rewrite的模塊,注釋httpd.conf中的下列文字即可開啟。
LoadModule rewrite_module modules/mod_rewrite.so

官方文檔介紹:


image.png
2.正則表達式

mod_rewrite使用的是Perl Compatible Regular Expression的詞匯,這里講解簡單的正則表達式幫助理解,詳細的正則表達式移至http://perldoc.perl.org/perlre.htmlhttp://shop.oreilly.com/product/9780596528126.do

1)需要的最小正則表達式

需要的最小正則表達式,中文自行搜索比較即可

mod_rewrite中經常會使用到 ! 字符,一般用在正則表達式前表示否定。

2)官方給出一個簡單的重寫url的公式例子,比較容易理解,就不翻譯了。

image.png

3 ) RewriteCond
RewriteCond指令定義一個規則條件。一個或多個RewriteCond可以在一個RewriteRule指令之前。只有當URI的當前狀態與其模式相匹配時才會使用下面的規則,并且如果滿足這些條件的話。

TestString是一個字符串,除了純文件以外,它還可以包含以下擴展結構:

  • RewriteRule反向引用:這些是形式$N(0 <= N <= 9)的反向引用。$1到$9提供對正則分組部分(括號)的訪問。從屬于RewriteRule就是當前的RewriteCond條件設置。$0提供了與該模式匹配的整個字符串的訪問權。
  • RewriteCond反向引用:這些是由%N(0 <= N <= 9)組成的反向引用。%1到%9提供對正則的分組部分的訪問(在括號中),從當前條件集的最后匹配RewriteCond。$0提供對整個字符串的訪問,該字符串與該模式匹配。
  • RewriteMap擴展:這些由樣式 ${mapname:key|default} 組成的擴展。
  • 服務器變量:這些變量是由樣式 %{NAME_OF_VARIALBE}組成的,NAME_OF_VARIABLE可以是如下例表中的字符串:

    這些變量都對應相似的命名HTTP MIME-headers,APACHE HTTP服務器的C 變量,或者Unix系統中的tm結構體。大多數文檔在手冊或CGI規范的其他地方被記錄。
    SERVER_NAME和SERVER_PORT分別依賴于UseCanonicalName和UseCanonicalPhysicalPort。
    那些對于 mod_rewrite很特別的部分包括下面這些 :

其他應該注意的:

    1. 變量SCRIPT_FILENAME和REQUEST_FILENAME包含相同的值——Apache HTTP服務器內部REQUEST_REC結構的文件名字段的值。第一個名稱是眾所周知的CGI變量名,而第二個名稱是REQUEST_URI的相應對應物(它包含request_rec的uri字段的值)。
      如果發生了替換,并且重寫繼續,那么兩個變量的值將相應地更新。
      如果在每個服務器環境中使用(例如在請求被映射到文件系統之前),SCRIPT_FILENAME和REQUEST_FILENAME不能包含完整的本地文件系統路徑,因為在處理的這個階段路徑未知。在這種情況下,兩個變量都將包含REQUEST_URI的值。為了在每個服務器上下文中獲得請求的完整的本地文件系統路徑,可以使用基于url的查詢指令%{LA-U:REQUEST_FILENAME}來確定REQUEST_FILENAME的最終值。
    1. %{ENV:variable} 中variable可以是任何環境變量,都是可以使用的。這是通過Apache httpd服務器進程的 getenv() ,如果沒有找到話,就從 Apache httpd結構進行查找。
    1. %{SSL:variable} 中variable的名字是一個SSL環境變量的名稱,不管mod_ssl是否加載都可以使用。但是如果沒有加載mod_ssl的話,會擴展為空字符串。例如: %{SSL:SSL_CIPHER_USEKEYSIZE}可能擴展到128。
    1. %{HTTP:header},header 可以是任何一個HTTP MIME-header的名稱,總是可以用來獲取HTTP請求中發送的關部信息。例:%{HTTP:Proxy-Connection}是HTTP頭部信息中{Proxy-Connection}的值 。如果在一個條件 中使用了HTTP頭,當請求的條件評估為真時,這個頭部信息將被添加到響應的變化頭部信息中。如果請求條件評估為假時,則不添加。對于適應的調整緩存,需要將HTTP頭添加到響應的不同頭部中。
      必須記住,在'ornext|OR'的標志情況下,條件會遵循一個短路邏輯,這樣就不會對某些條件進行評估。
    1. %{LA-U:variable}可用于執行一個內部(URL-based)的子請求,以確定變量的最終值。這可以用來訪問重寫的變量,而這在當前階段是不可用的,但是將在后面的階段中設置。
      例如,要根據每個服務器上下文中REMOTE_USER變量(httpd.conf 文件)重寫,你必須使用 %{LA-U:REMOTE_USER}- 這個變量由認證階段設置,該階段是在URL轉換階段之后(在mod_rewrite操作期間)。
      另一方面,因為mod_rewrite實現了它的每個目錄上下文(.htaccess文件)通過API的Fixup階段,由于認證階段在此階段 之前,您可以在該上下文中使用%{REMOTE_USER}。***
    1. %{LA-F:variable} 可用于執行內部的子請求(基于文件名),以確定變量的最終值。大多數時候,這和上面的LA-U是一樣的。

CondPattern是條件模式,它是一個正則表達式,應用于TestString的當前實例。在匹配CondPattern之前,先對TestString進行評估。
CondPattern通常是一個perl兼容的正則表達式,但是還有一些附加語法可以用來對TestString執行其他有用的測試:

    1. 你可以在模式字符串之前加上 '!' 字符( 感嘆號 ) 來指定一個不匹配的模式。
    1. 你可以執行詞法字符串比較:
      '<CondPattern'(詞法之前)
      把CondPattern當作普通字符串,并將它與TestString進行比較。如果在CondPattern之前,TestString是正確的。
      '>CondPattern' (詞法之后)
      把CondPattern當作普通字符串,并將它與TestString進行比較。如果在CondPattern之后,TestString是正確的。
      '=CondPattern'(等于詞法)
      把CondPattern當作普通字符串,并將它與TestString進行比較。如果TestString等于CondPattern就是正確的。(兩個字符串必須絕對相等,字符是字符)。如果CondPattern是“”(兩個引號)這將比作TestString為空字符串。
      '<=CondPattern(小于或等于詞法)'
      把CondPattern當作普通字符串,并將它與TestString進行比較。如果TestString在詞法之前或者等于詞法就是真。(兩個字符串必須絕對相等,字符是字符)。
      '>=CondPattern(大于或等于詞法)'
      把CondPattern當作普通字符串,并將它與TestString進行比較。如果TestString在詞法之后或者等于詞法就為真。(兩個字符串必須絕對相等,字符是字符)。
    1. 你可以執行整數比較:
      '-eq' (數值相等):
      TestString當作一個整數,并且與CondPattern進行數值比較。兩個數值相等就為真。
      '-ge' (數值大于或等于):
      TestString當作一個整數,并且與CondPattern進行數值比較。TestString數值上大于或等于CondPattern就為真。
      '-gt'(數值大于):
      TestString當作一個整數,并且與CondPattern進行數值比較。它的數值大于CondPattern那就為真。
      '-le'(數值小于或等于):
      TestString當作一個整數,并且與CondPattern進行數值比較。它的數值小于或CondPattern就為真。使用-L或者-h 變量避免與 -l混淆。
      '-lt'(數值小于):
      TestString當作一個整數,并且與CondPattern進行數值比較。它的數值小于CondPattern就為真。使用-L或者-h 變量避免與 -l混淆。***
    1. 你可以執行各種文件屬性測試:
      '-d'(是目錄)
      TestString當作一個路徑名稱,測試它是否存在且是一個路徑。
      '-f'(是一個普通文件)
      TestString當作一個路徑名稱,測試它是否存在且是一個普通文件。
      '-F'(是通過子請求的現有文件)
      檢查TestString是否是有效的文件,通過所有服務器的當前配置的訪問控制來訪問該路徑。這將使用內部 子請求來執行檢查,所以要小心使用它---它會影響服務器性能。
      '-H'(是符號鏈接,bash約定)
      詳見 -I
      '-I'(是符號鏈接)
      TestString當作一個路徑名稱,測試它是否存在且為一個符號鏈接。當使用lt或-le測試時如果可能出現混淆,也可使用-L或者-h的bash約定。
      '-L'(是符號鏈接,bash約定)
      詳見-I
      '-s'(是普通文件,有大小)
      TestString被當作一個路徑名稱,測試它是否存在且一個文件大小于0的常規文件。
      '-U'(是通過子請求,存在的URL)
      檢查TestString是否是一個有效的URL,通過所有服務器的當前配置的訪問控制來訪問該路徑。這將使用內部子請求來執行檢查,所以要小心使用它---它會影響服務器的性能。
      '-x'(有可執行的權限)
      TestString當作一個路徑名稱,測試它是否存在且有可執行的權限。這些權限是根據底層操作系統來確定的。
      注意:所有這些測試也可用一個感嘆號(!)來否定它們的含義。
    1. 如果TestString有一些特殊的表達式,CondPattern將把它們看作一個ap_expr.
      在如下的例子中,-strmatch用于比較REFERER和站點主機名,以阻止不必要的熱鏈接。
      RewriteCond expr "! %{HTTP_REFERER} -strmatch '://%{HTTP_HOST}/' "
      RewriteRule ^/images - [F]
    1. 也可為CondPattern后設置特殊的標志,[flags]作為RewriteCond指令的第三個參數,其中的標志是一個以逗號分隔的下列任何標記的列表:
      'nocase|NC'(no case):
      這使得測試不區分大小寫——“A-Z” 和 “a-z”之間的區別被忽略了,無論是在擴展的TestString還是CondPattern中。該標記僅有效于TestString和CondPattern。它對文件系統和子請求檢查沒有影響。
      'ornext|OR'(or next condition)
      用這個來將規則條件與局部或隱式結合起來。典型的例子:
      RewriteCond %{REMOTE_HOST} ^host1 [OR]
      RewriteCond %{REMOTE_HOST} ^host2 [OR]
      RewriteCond %{REMOTE_HOST} ^host3
      RewriteRule ...some special stuff for any of these hosts...
      沒有這個標識,你需要寫三遍condition/rule對。
      'novary|NV'(沒有變化)
      如果一個HTTP頭部在條件中使用,這個標識阻止在回應的變化頭部中添加這個頭部信息。
      如果響應的表示因該頭部信息的值而變化,那么使用此標志可能會破壞響應的適當緩存。因此,只有在理解了變化頭的含義時,才應用使用這個標志。
      Example:
      為了根據"User-Agent:"請求的頭,重寫網站主頁,可以使用如下:
      RewriteCond %{HTTP_USER_AGENT} ^Mozilla
      RewriteRule ^/$ /homepage.max.html [L]

      RewriteCond %{HTTP_USER_AGENT} ^Lynx
      RewriteRule ^/$ /homepage.min.html [L]

      RewriteRule ^/$ /homepage.std.html [L]
      解釋:如果你使用一個它定義為'Mozilla'的瀏覽器(包括 Netscape Navigator,Mozilla etc),你將取得最大的主頁(有可能會包括框架,或者其他特殊特性)。如果你使用Lynx瀏覽器(這是基于終端),你將取得最小的主頁(有可能是一個專為輕變,只顯示文本的瀏覽器設計的版本)。如果既不是上面條件中適用的瀏覽器(你使用任何瀏覽器,或者你的瀏覽器定義它自己為不標準版的),你將取得std(標準)的主頁。

4) 重寫規則由三個部分組成
-> 樣式(pattern): 請求的url要滿足此正則表達式;
-> 替換(substitution): 滿足正則表達式的請求url被重寫的路徑;
-> [flags] : 影響重寫請求的選項;


舉例:
A. 系統文件路徑轉移至另一個路徑
RewriteRule ^/games /usr/local/games/web
這有點像別名設置。如訪問/games/xxx.jpg會直接指向/usr/local/games/web/xxx.jpg路徑。
B. 網絡路徑到資源
RewriteRule ^/foo$ /bar
如果文件根目錄設置為 /usr/local/apache2/htdocs,那么它將映射http://example.com/foo 的請求到 路徑 /usr/local/apache2/htdocs/bar。
C. 完整的url重寫
RewriteRule ^/product/view$ http://site2.example.com/seeproduct.html [R]
這將引導用戶生成一個新的請求到具體的URL。
替換也可以包含請求中正則表達式匹配的部分追加至其后
RewriteRule ^/product/(.*)/view$ /var/web/productdb/$1
變量$1將被樣式中的圓括號中的正則表達式匹配部分替換
舉個例子:
請求為http://example.com/product/r14df/view,將映射至路徑 /var/web/productdb/r14df。


3. RewriteRule Flags(重寫規則中的[flags])

apache的重寫規則可以被一個或者多個標識(flags)修改。標識包含在規則最后的方括號中,多個標識用逗號>隔開。
RewriteRule pattern target [Flag1,Flag2,Flag3]
所有的標識有短的術語,也有長的術語(極少部分的除外),如長術語cookie,短的術語就是co。flags不區分大小寫。
挑幾個例子說吧,其他更多請參照官方文檔。
B(跳過回溯引用 escape backreferences)
[B]標識指令重寫規則在應用轉換之前跳過非字母數字字符。
mod_rewrite在映射url之前不會跳過它們,所以回溯引用在他們被使用的同時也不會被跳過。使用B標識,在回溯引用中非字母數字字符會被跳過。舉例:
RewriteRule ^search/(.*)/$ /search.php?term=$1
搜索表達式'x & y/z',瀏覽器會加密它成為'x%20%26%20y%2Fz',請求就成為了search/x%20%26%20y%2Fz。沒有B標識,重寫規則會映射成為一個無效的URL‘search.php?term=x & y/z’,于是會被加密成search.php?term=x%20&y%2Fz=,當然這并不是所期望的那樣。

如果在其后面加上[B]標識,參數會在傳給輸入的URL前再次加密。結果就是一個正確的映射 /search.php?term=x%20%26%20y%2Fz。
**注意:你同時需要設置AllowEncodeSlashes為On,這樣才能讓這種特殊情況正常工作,httpd不允許加密URLs中的斜杠,如果碰見了就會返回404。


F 禁止
使用[F]標識導致服務器返回403禁止狀態碼給客戶端。直接使用Deny也能完成這樣的效果,但是[F]在返回禁止狀態時更加靈活。
接下來的規則會禁止執行.exe文件從你的服務器中導出。
RewriteRule .exe - [F]
例子中使用"-"語法作為重寫的目標,意思就是請求的URI沒有被修改。如果你要禁止此請求,沒有理由重寫成其他的URI。
當使用[F]時,[L]也隱藏使用了。這就是,回應立即返回,并不會使用進一步的規則。


L最后的
[L]標識促使mod_rewrite阻止繼續執行規則制定。在大多數的內容中,它意味著如果這個規則匹配,沒有進一步的規則會執行。這跟Perl中的last命令或者C中的break命令是一致的。使用這個標識表明當前的規則應該立即執行且無需考慮進一步的規則。

在這里舉的例子,會重寫任何請求到index.php,最初的請求作為一個請求字符串參數添加到index.php中。
但是,RewriteCond確保當請求已經給到index.php時,RewriteRule會被跳過。
RewriteBase /
RewriteCond %{REQUEST_URI} != /index.php
RewriteRule ^(.*) /index.php?req=$1 [L,PT]


PT轉移

4. 一些access例子(這些例子不一定有作用,理解這些規則更重要)
  • 1)禁止圖片熱鏈接
    描述:
    下面的技術禁止在頁面中插入其他站點,包括你的圖像。這種做法通常被稱為“熱鏈接”,并導致你的帶寬被用于其他人的站點提供內容。
    解決:
    這個技術依賴于變量HTTP_REFERER的值,這是可選的。因此,有些人有可能繞開這一限制。但是,大多數用戶將體驗到失敗的請求,隨著時間的推移,這將導致圖片從其他站點中刪除。
    有很多方面可以解決這個情況。
    在第一個例子中,如果它沒有從我們網站上的一個頁面發起請求,那我們只是拒絕請求。為了本例的目的,我們假設我們網站是 www.example.com
    RewriteCond %{HTTP_REFERER} !^$
    RewriteCond %{HTTP_REFERER} !www.example.com [NC]
    RewriteRule .(gif|jpg|png)$ - [F,NC]
    在第二個例子中,我們顯示另一個鏡像替代失敗請求
    RewriteCond %{HTTP_REFERER} !^$
    RewriteCond %{HTTP_REFERER} !www.example.com [NC]
    RewriteRule .(gif|jpg|png)$ /images/go-away.png [R,NC]
    在第三個例子中,我們直接跳轉請求到當前圖片所在的其他網站
    RewriteCond %{HTTP_REFERER} !^$
    RewriteCond %{HTTP_REFERER} !www.example.com [NC]
    RewriteRule .(gif|jpg|png)$ http://other.example.com/image.gif [R,NC]
    在這些技術中,最后兩種方法最有效地讓人們停止熱鏈接你的圖片,因為他們不會看到他們期望看到的
    圖像。
    討論:
    如果你想要做的就是拒絕訪問資源,而不是將請求重定向到其他地方,那么可以在不使用mod_rewrite的情況下完成此任務:
    SetEnvIf Referer example .com localreferer
    <FilesMatch .(jpg|png|gif)$>
    Require env localreferer
    </FilesMatch>
  • 2) 拒絕黑名單中的主機
    RewriteEngine on
    RewriteMap hosts-deny txt:/path/to/hosts.deny
    RewriteCond ${hosts-deny:%{REMOTE_ADDR}|NOT-FOUND} !=NOT-FOUND [OR]
    RewriteCond ${hosts-deny:%{REMOTE_HOST}|NOT-FOUND} !=NOT-FOUND
    RewriteRule ^ - [F]

hosts.deny
注意!這是一個映射,不是一個名單,即使我們就是這樣希望它的。
mod_rewrite 解析它作為 鍵/值 對,所以至少每個條目必須有虛擬的值"-"。

193.102.180.41 -
bsdtil.sdm.de -
192.76.162.40 -

  • 3) 基于referer的引流
    描述:
    根據請求的Referer重定向請求,每個referer的目標不同。
    解決:
    RewriteMap deflector txt:/path/to/deflector.map

    RewriteCond %{HTTP_REFERER} !=""
    RewriteCond ${deflector:%{HTTP_REFERER} } =-
    RewriteRule ^ %{HTTP_REFERER} [R,L]

    RewriteCond %{HTTP_REFERER} != ""
    RewriteCond ${deflector:%{HTTP_REFERER}|NOT-FOUND} !=NOT-FOUND
    RewriteRule ^ ${deflector:%{HTTP_REFERER}} [R,L]

注意:map文件列出了每個referer的重定向目標,或者,如果我們只是希望重定向到它們來自哪里,那么“-”就需要放在map里。
deflector.map
http://badguys.example.com/bad/index.html -
http://badguys.example.com/bad/index2.html -
http://badguys.example.com/bad/index3.html http://somewhere.example.com

  • 4) mod_rewrtite重定向和重映射
    從舊到新(內部)
    描述:
    假設我們最近重新命名了頁面foo.html為bar.html,現在想向后兼容舊的URL。但是,我們想使用舊URL的用戶不會察覺這些頁面被重命名。那么,我們不想更改他們瀏覽器中的地址。
    解決:
    RewriteEngine on
    RewriteRule ^/old.html$ /new.html [PT]
    重寫舊到新(外部)
    描述:
    再次假設我們最近重命名foo.html為bar.html,現在想向后說兼容舊的URL。但是這次我們想將用戶的舊URL得到新的地址的提示,例,他們的瀏覽器地址欄也應該改變。
    解決:
    RewriteEngine on
    RewriteRule ^/foo.html$ bar.html [R]
    資源移至其他的服務器
    描述:
    如果一項資源已經移至其他的服務器,當用戶更新他們的書簽的時候,你可能希望舊服務器上的URLs繼續運行一斷時間。
    解決:
    你可以用mod_rewrite跳轉到這些URLs到新的服務器上,但是你也許也考慮到使用Redirect或者RedirectMatch指令。
    ``#With mod_rewrite
    RewriteEngine on
    RewriteRule ^/docs/(.+) http://new.example.com/docs/$1 [R,L]

    ``#With RedirectMatch
    RedirectMatch ^/docs/(.*) http://new.example.com/docs/$1

    ``#With Redirect
    Redirect /docs/ http://new.example.com/docs/
    從靜態到動態
    描述:
    如何用一種無縫的方式轉換靜態頁面foo.html到動態變量 foo.cgi,例,沒有瀏覽器或用戶注意到。
    解決:
    我們只需要將URL重寫為CGI-script,并強制處理程序成為CGI-script,以便將其作為CGI程序執行。這是對/quux/foo.html的請求內部對/quux/foo.cgi的調用。
    RewriteEngine on
    RewriteBase /~quux/
    RewriteRule ^foo.html$ foo.cgi [H=cgi-script]
    文件擴展的向后兼容性
    描述:
    在合并document.YYYY到document.XXXX時,我們該如何做到URLs向后兼容(依然存在虛擬的)?例,在傳輸完一堆.html文件到.php?
    解決:
    我們將名稱改寫為basename,并測試新的擴展存在。如果它存在,我們就取那個名字,否則我們重寫URL到它的初始狀態。

    backward compatibility ruleset for rewriting document.html to document.php
    when and only when document.php exists

    <Direcotry /var/www/htdocs>
    RewriteEngine on
    RewriteBase /var/www/htdocs
    RewriteCond $1.php -f
    RewriteCond $1.html !-f
    RewriteRule ^(.*).html$ $1.php
    </Directory>
    討論:
    這個例子使用了一個經常被忽略的mod重寫特性,它利用了規則集的執行順序。特別是,mod重寫在對rewriterecond指令進行評估之前,對其左邊的部分進行評估。因此,$1已經RewriteCond指令被評估的時候被定義。這允許我們使用相同的基本文件名來測試原始文件(document.html)和target(document.php)文件的存在。
    該規則集被設計為在每個目錄上下文中使用(在一個目錄中或在.htaccess文件中),以便-f檢查查找正確的目錄路徑。您可能需要設置一個RewriteBase指令來指定您正在工作的目錄基礎。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,505評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,556評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,463評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,009評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,778評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,218評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,281評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,436評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,969評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,795評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,993評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,537評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,229評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,659評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,917評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,687評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,990評論 2 374

推薦閱讀更多精彩內容

  • 重寫規則 【重寫規則的作用范圍】 可以使用在Apache主配置文件httpd.conf中 可以使用在httpd.c...
    桖辶殤閱讀 1,683評論 0 0
  • 前兩天部署一個項目到本機環境,從nginx轉到apache,因為不熟悉apache的重寫規則,給自己挖了很多坑。。...
    牽小馬過河閱讀 1,052評論 0 0
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,785評論 18 139
  • nginx重寫規則 nginx rewrite 正則表達式匹配 大小寫匹配 ~ 為區分大小寫匹配 ~* 為不區分大...
    桖辶殤閱讀 5,595評論 0 2
  • 對于巴菲特的投資理念,大多數人都比較熟悉。但我們為什么既然知道,卻還是沒有巴菲特那樣的投資收益呢?其實,我覺得最關...
    鹿鹿無畏閱讀 620評論 0 51