这是我的.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
答案 0 :(得分:1)
Zapk,听起来HamZa已经告诉过你解决方案:是的,\s
会匹配空格(就像大多数正则表达式一样)。
为了完成,这是一个鲜为人知的事实:Apache使用PCRE进行正则表达式匹配。这对于网络管理员来说是个好消息,因为PCRE是最全功能的引擎之一。因此,除了在互联网上浮动的Apache重定向的常见丑陋示例之外,您可以做很多事情。
作为一个开始,我必须说,看到你在你的正则表达式中使用未转义的正斜杠时,眼睛很高兴,而网络上的许多例子都是不必要的大汤。{{1} } 看到你正在使用非捕获组也是一种享受。