2011-07-10 41 views
2

我創建了一個正則表達式[0-9]{1,10}[-][0-9a-z]{5,9}找到1到10個數字後跟一個短劃線,後面跟着5到9個數字和小寫字母,並且據我所知可以告訴它的工作。但是,如何在htaccess文件中使用它來掩蓋http://website.com/realpage.php?id=00000-a0a0aaa0http://website.com/00000-a0a0aaa0的URL。如何在htaccess文件中使用正則表達式?

我使用目前的規則是...

RewriteRule /[0-9]{1,10}[-][0-9a-z]{5,9}/?$ realpage.php?id=$1 [QSA,L] 

...但它似乎並不奏效。

回答

1

首先,我的猜測是你想掩蓋另一種方式。

反正你重寫規則將是:

RewriteRule ^([0-9]{1,10}-[0-9a-z]{5,9})/?$ realpage.php?id=$1 [QSA,L] 

注:

  1. 假設你的規則在.htaccess文件,你不需要 包裹你的模式在斜槓(/) 。
  2. 您不需要 包含第一個網址斜槓(域名後面的一個)。
  3. 中間短劃線不一定在括號內,因爲您只需要一個 短劃線。
  4. 最後,您需要將整個事物放在圓括號中,以便 能夠在此 的情況下使用$1將其引用(重寫)爲真實路徑。

希望是有道理的。

+0

如果規則不在.htaccess中但是在配置文件中(例如''內),則需要使用前導斜槓 – LazyOne

+0

您絕對是@LazyOne。現在編輯我的答案。 –

0

那麼,你需要在你身邊想,如果你正在使用它作爲替代以匹配位斗拱,$1說,第一個匹配的支架組,你也不必繞破折號-[]

RewriteRule /([0-9]{1,10}-[0-9a-z]{5,9})/?$ realpage.php?id=$1 [QSA,L] 

另外,如果你想用另一種方式,你的「從面具網址」是混亂。

您無法直接與查詢字符串參數RewriteRule進行匹配。

您必須使用RewriteCond來匹配它,然後使用RewriteRule來進行重寫。

RewriteCond %{QUERY_STRING} id=([0-9]{1,10}[-][0-9a-z]{5,9}) 
RewriteRule ^realpage.php$ /%1/ [L] 
相關問題