我在下面配置了这个Apache RewriteRule,其问题在于它允许以下URL而不返回HTTP 404错误。
(这只是用于开发的本地网址,不可公开访问)
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。
答案 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]