2012-01-01 84 views
1

爲什麼這個規則不會返回帶有字符的斜線?正則表達式和正斜槓加上URL中的字符

RewriteRule ^test/(.+)/(.+)/(.+)/?$ test.php?one=$1&two=$2&three=$3 

例如,在此URL

mysite.com/test//one///two////three///

它會返回

$1='one' 

$2='two' 

$3='three' 

但我想它返回

$1='/one' 

$2='//two' 

$3='///three///' 

我也試過^posts/{1}(.+)/{1}(.+)/{1}(.+)/?$但它並沒有工作太...

沒有別的來到我的腦海裏。誰能幫忙?提前

回答

2

的URL

由於可能已被服務器之前處理,去除雙斜線。如果您匹配完整的網址,那麼所有的斜槓仍然存在?

+0

的感謝!我爲前一個URL嘗試了這個正則表達式'^ test /(.*)$',輸出是'$ 1 ='one/two/three /''。看來apache刪除多個斜槓而不重定向到更正的URL。我試圖防止重複的內容爲我的網站,但阿帕奇使它更難! – Drust 2012-01-02 09:20:52

1

試試這個:

RewriteRule ^test(/+[^/]+)(/+[^/]+)(/+[^/]+/*)$ test.php?one=$1&two=$2&three=$3 
+0

這個正則表達式工作的很好,並且對於之前的URL(apache會自動更改爲'mysite.com/test/one/two/three /'結果是$ 1 ='/ one'$ 2 ='/ two'$ 3 ='/三/ /'和它似乎工作,如果Apache不刪除多個斜線! – Drust 2012-01-02 09:20:30

相關問題