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

时间:2013-06-20 10:20:52

标签: php regex apache mod-rewrite url-rewriting

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

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

(这只是用于开发的本地网址,不可公开访问)

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不正确。我想要做的只是在正斜杠之间只允许一个字符串。

RewriteRule可以配置为执行此操作吗?

我正在使用Apache 2.2.3。

2 个答案:

答案 0 :(得分:1)

试一试。

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

答案 1 :(得分:1)

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

([^.]+)

这意味着匹配1个或多个字符的文本,直到找到点/句点。你应该使用:

([^/]+)

这意味着匹配1个或多个字符的文本,直到找到正斜杠。

您更改的规则将是:

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