1

我在下面配置了这个 Apache RewriteRule,它的问题是它允许以下 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是不正确的。我想要做的是只允许正斜杠之间的一个字符串。

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

我正在使用 Apache 2.2.3。

4

2 回答 2

1

试一试。

RewriteRule ^golf/([^\/]+)/([^\/]+)/([^.]+)/$ /golf/?city=$1&golf_region=$2&golf_category=$3 [QSA,L]
于 2013-06-20T10:24:30.180 回答
1

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

([^.]+)

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

([^/]+)

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

您更改的规则将是:

RewriteRule ^golf/([^/]+)/([^/]+)/([^/]+)/?$ /golf/?city=$1&golf_region=$2&golf_category=$3 [QSA,L,NC]
于 2013-06-20T10:26:50.947 回答