Apache rewrite rule which works with or without a trailing slash

不羁的心 提交于 2019-12-29 04:35:08

问题


I'm trying to redirect a series of static URLs, and I want it to work whether or not the trailing slash is present:

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

I've tried the following, and all sorts of variations, but I always get a match only with the trailing slash present:

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

I feel like I'm missing something obvious. Help?


回答1:


Other than in EBNF or ABNF, a quantifier in regular expressions refers the preceding expression and not the following expression.

So:

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



回答2:


If you want to match foo/bar regardless of whether it's followed by another portion of path, you can say:

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

This will match any of the following:

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

It means: match either a) a slash followed by 0 or more characters, or b) the end of the string.

On the other hand, these might be undesirable:

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



回答3:


Try

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



回答4:


This also works: RedirectMatch 301 /foo/bar(/.*|$) http://url.com/tacos



来源:https://stackoverflow.com/questions/3843293/apache-rewrite-rule-which-works-with-or-without-a-trailing-slash

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!