簡體   English   中英

Apache重寫規則,可以使用或不使用尾部斜杠

[英]Apache rewrite rule which works with or without a trailing slash

我正在嘗試重定向一系列靜態URL,無論是否存在尾部斜杠,我希望它能夠正常工作:

/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

我覺得我錯過了一些明顯的東西。 救命?

除了在EBNFABNF中 ,正則表達式中的量詞指的是前面的表達式而不是下面的表達式。

所以:

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

如果你想匹配foo / bar,無論它是否跟着路徑的另一部分,你可以說:

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

嘗試

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

這也有效: RedirectMatch 301 /foo/bar(/.*|$) http://url.com/tacos

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM