【问题标题】:RewriteRule: bad flag delimitersRewriteRule:错误的标志分隔符
【发布时间】:2014-04-18 22:46:02
【问题描述】:

这是我的.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

【问题讨论】:

  • 尝试转义空间[\w\ ]+或直接使用[\w\s]+

标签: php regex url space


【解决方案1】:

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

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

首先,我必须说,很高兴看到您在正则表达式中使用了未转义的正斜杠,而网络上的许多示例使不必要的 \/\/ 看到您使用的是非捕获组也是一种享受。

【讨论】:

    猜你喜欢
    • 2014-01-20
    • 2015-02-04
    • 1970-01-01
    • 2017-10-04
    • 1970-01-01
    • 2015-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多