2010-10-01 14 views
15

我試圖重定向一系列靜態的URL,我想它的工作結尾的斜線是否存在:其中有或沒有尾隨工作的Apache重寫規則削減

/foo/bar ---> /tacos 
/foo/bar/ --> /tacos 

我已經試過以下,以及種種的變化,但我總是得到一個匹配僅本結尾的斜線:

RewriteRule ^foo/bar?/$ http://url.com/tacos 
RewriteRule ^foo/bar(?/)$ http://url.com/tacos 
RewriteRule ^foo/bar*/$ http://url.com/tacos 
RewriteRule ^foo/bar(*/)$ http://url.com/tacos 

我覺得我失去了一些東西明顯。幫幫我?

回答

27

EBNFABNF以外,正則表達式中的量詞是指前面的表達式,而不是以下表達式。所以:

RewriteRule ^foo/bar/?$ http://url.com/tacos 
+0

哈,我知道這是愚蠢的東西那樣。 :) 謝謝! – 2010-10-01 22:11:31

+6

問號說:「我會有0或1個尾隨斜槓。」你去一家餐館說「我要一份玉米麪豆卷?」你真的說「我會有0或1個炸玉米餅。」 – bobobobo 2010-12-22 22:57:13

+0

工作對我們很好。謝謝 – 2015-10-16 17:58:51

3

嘗試

RewriteRule ^foo/bar/?$ http://url.com/tacos 
13

如果你想不管它,再接一個路徑的另一部分匹配富/酒吧,你可以說:

RewriteRule ^foo/bar(/.*|$) http://url.com/tacos 

這將匹配以下任何一種:

foo/bar 
foo/bar/ 
foo/bar/baz 

這意味着:匹配a)斜線後跟0或更多字符,或者b)字符串的結尾。

在另一方面,這些可能是不可取的:

RewriteRule ^foo/bar/? http://url.com/tacos  # This also matches foo/barb 
RewriteRule ^foo/bar/?$ http://url.com/tacos # This will not match foo/bar/baz