加号和.htaccess mod_rewrite中的百分比符号


Plus sign, and percentage signs in .htaccess mod_rewrite

我试图通过.htaccess在某个URL上应用RewriteRule,但遇到了问题。

以下是我之前针对这个特定用途的代码:

RewriteRule ^levels-u-([a-z0-9_-]+)'.html$ levels.php?p=$1&i=u&r=true [QSA,L,NC]
RewriteRule ^levels-u-([a-z0-9_-]+)-'(([a-z]+)')'.html$ levels.php?p=$1&i=u&n=$2&r=true [QSA,L,NC]

它的工作方式是可能有这样的页面:

levels-u-u-u-username.html

或本页:

levels-u-u-username-(文本).html

但是username的文本也可以包括空格和方括号(显示为+、%5B和%5D)。

所以我用这个代码来匹配的任何字符组合

RewriteRule ^levels-u-([^/]+)'.html$ levels.php?p=$1&i=u&r=true [QSA,L,NC]
RewriteRule ^levels-u-([^/]+)-'(([a-z]+)')'.html$ levels.php?p=$1&i=u&n=$2&r=true [QSA,L,NC]

因此,现在,这将不会输出404错误:

levels-u-u-username+%5Bmore%5D.html(即"username[more]")

但现在的问题是,后一种

levels-u-u-username-(文本).html

将在第一个RewriteRule中将"username-(deleted)"重写为$1,而不是在第二个Rewriteule中用$1="username"和$2="text"

我想弄清楚的是,如何将加号和括号合并到.htaccess mod_rewrite:的正则表达式中

([a-z0-9_-]+)

因为

([^/]+)

与另一个"重写规则"发生冲突。

同样,这些是我需要添加到表达式中的字符:

"+"、"%5B"(即"[")、"%5D"(即为"]")

我的另一个想法是禁用短语"-("如果可能的话?

只是为了支持那些可以使用的附加字符:

RewriteRule ^levels-u-(['[']+'w]+)'.html$ index.php?p=$1&i=u&r=true [QSA,L,NE]
RewriteRule ^levels-u-(['[']+'w]+)-'(([a-z]+)')'.html$ levels.php?p=$1&i=u&n=$2&r=true [QSA,L,NE]