限制Apache RewriteRule为每个URL元素一个正斜杠


restrict Apache RewriteRule to one forward slash per URL element

我在下面配置了这个Apache rewriterrule,它有一个问题,它允许以下URL而不返回HTTP 404错误。

http://www.crmpicco.lan/golf/glasgow/play/explore/features/explore/course-features/ayrshire/parkland/

(这只是一个用于开发的本地URL,不能公开访问)

RewriteRule ^golf/([^.]+)/([^.]+)/([^.]+)/$ /golf/?city=$1&golf_region=$2&golf_category=$3 [QSA,L]

当我导出PHP $_REQUEST超全局变量时,它会给我这些值:

[url] => golf/
[city] => glasgow/play/explore/features/explore/course-features
[golf_region] => ayrshire
[golf_category] => parkland

值得注意的是,city不正确。我想要做的是在正斜杠之间只允许一个字符串

rewriterrule可以配置成这样吗?

试试吧。

RewriteRule ^golf/([^'/]+)/([^'/]+)/([^.]+)/$ /golf/?city=$1&golf_region=$2&golf_category=$3 [QSA,L]

问题是使用这个正则表达式:

([^.]+)

表示匹配1个或多个字符的文本,直到找到点/句号。你应该使用:

([^/]+)

表示匹配1个或多个字符的文本,直到找到正斜杠。

修改后的规则为:

RewriteRule ^golf/([^/]+)/([^/]+)/([^/]+)/?$ /golf/?city=$1&golf_region=$2&golf_category=$3 [QSA,L,NC]