在.htaccess當中可以使用的Regular Expression – 1
目前台灣網路上最流行的那個RegEx教學是使用在SED裡面的,
而沒有最簡單的那種,例如使用在.htaccess當中的RegEx語法教學.
所以我來寫,雖說這種東西通常是拾人牙慧的啦…
[] 這兩個括號用來指定開始與結束,把東西包起來,那麼,要包哪些東西起來呢?
[a-e] 從a到e [c-e] 從c到e [a-z] 從a到z
[A-E] 從A到E [C-E] 從C到E [A-Z] 從A到Z (對,大小寫有差)
[0-9] 從0到9 [4-6]從4到6
[refly] 框框裡任一個字,像是r,e,f,l,y 都符合條件,但是"refly"不符合條件喔!
那要怎麼去指定"refly"這個字? 用 ^refly$ 就可以了. (^開始, $結束)
^ 在[]裡時,是用來做為否定, 例如 [^0-3]就是除了0,1,2,3之外都可以.
^ 在每一行最前端時,用來表示這一行的開始.
. 代表任何一個字
? 有在字串裡找到符合條件的結果 0或1次 , 例如 a? 表示找到0或1次a, (abc)?表示找到0或1次abc, [a-z]?找到任何a-z間的小寫字母0或1次
+ 有在字串裡找到符合條件的結果 1次以上 , 例如 a? 表示找到1次以上a, (abc)?表示找到1次以上abc, [a-z]?找到任何a-z間的小寫字母1次以上
* 有在字串裡找到符合條件的結果 0次以上 , 例如 a? 表示找到0次以上a, (abc)?表示找到0次以上abc, [a-z]?找到任何a-z間的小寫字母0次以上
(覺得0次很奇怪?參考第一個回覆吧, j大說的對,我沒用過這種用法所以自己認為*沒意義T_T)
RewriteCond 後面加規則,告訴Apache說:這就是你檢查的規則,看有沒有符合條件
RewriteRule 則是告訴Apache,如果有符合條件的,就這樣改寫網址
() 建立一個以後可以使用的變數
^ 這是一行的開始
$ 這是一行的結束,也可以拿來呼叫變數,限定單行RewriteRule內使用
% 將變數拿出來使用,基本上是在RewriteCond裡面指定條件,然後到RewriteRule裡面用%1來使用參數值
————————————————————-
所以以下是範例
————————————————————-
變數如何使用?
RewriteRule ^(var1)/no-var/(var2)$ /to-use-variables-type-$1-and-$2
(var1)跟(var2)用()包起來,表示他們是變數,後面就可以用$1和$2來做呼叫剛剛這一串的結果就會變成
to-use-variables-type-var1-and-var2
剛剛那一段的另外一種用法,先判斷再改寫
RewriteCond %{CONDITION_STUFF} ^(var1)/no-var/(var2)
RewriteRule ^no-var/no-var/no-var$ /to-use-variables-type-%1-and-%2
最後的結果會是這樣:
to-use-variables-type-var1-and-var2
那如果把$跟%這兩種變數夾在一起用呢?
RewriteCond %{CONDITION_STUFF} ^(var1)/no-var/(var2)
RewriteRule ^(var1)/no-var/(var2)$ /to-use-variables-type-$1-and-%2-$2
結果會變成這樣:
to-use-variables-type-var1-and-var2-var2
一樣還是可以用的.
相關的文章:
* 怎麼會沒意義呢?
例如我幾個字串是這樣:
1. "/xxx"
2. "/xxx/123456″
條件是第一個字串如果沒給數字,就預設給 0 ;不然的話就把後面的數字抓進來用。
這時候可以這樣比對:
^\/xxx\/?(\d*)$
這時候小括號得到的就是我們要的數字了。
不曉得版主所說的沒意義是指?
對不起,我沒考慮到這邊Q_Q
原文已經修改,感謝jaceju大~