RewriteRule:坏标记分隔符

时间:2014-04-18 22:46:02

标签: php regex url space

这是我的.htaccess文件:

ErrorDocument 404 /index.php?cmd=notfound
# Maintenance
RewriteCond %{REMOTE_ADDR} !^(Redacted)
RewriteRule ^ maintenance.php [L]

RewriteEngine On 
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(\w+)(?:/(\w+))?(?:/(\w+))?(?:/(\w+))?(?:/(\w+))?(?:/(\w+))?/?$ route.php?1=$1&2=$2&3=$3&4=$4&5=$5&6=$6 [L]

它有效,没有错误,但是有问题:最后一个RewriteRule不允许参数中的空格。

有人告诉我用\w+替换[\w ]+,但当我这样做时,我收到错误:

RewriteRule: bad flag delimiters

1 个答案:

答案 0 :(得分:1)

Zapk,听起来HamZa已经告诉过你解决方案:是的,\s会匹配空格(就像大多数正则表达式一样)。

为了完成,这是一个鲜为人知的事实:Apache使用PCRE进行正则表达式匹配。这对于网络管理员来说是个好消息,因为PCRE是最全功能的引擎之一。因此,除了在互联网上浮动的Apache重定向的常见丑陋示例之外,您可以做很多事情。

作为一个开始,我必须说,看到你在你的正则表达式中使用未转义的正斜杠时,眼睛很高兴,而网络上的许多例子都是不必要的大汤。{{1} } 看到你正在使用非捕获组也是一种享受。