加号,和.htaccess mod_rewrite中的百分号

时间:2013-11-28 23:22:29

标签: php regex apache .htaccess mod-rewrite

我正在尝试通过.htaccess在某个网址上应用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]

这种方式的工作方式是可以有这个页面:

水平-U-username.html

或此页:

水平-U-用户名 - (文本)的.html

但是用户名的文本也可以包含空格和括号(显示为+,%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-username +%5Bmore%5D.html(即“用户名[更多]”)

但现在问题在于后者

水平-U-用户名 - (文本)的.html

会将第一个RewriteRule中的“username-(已删除)”重写为$ 1,而第二次使用$ 1 =“username”和$ 2 =“text”重写

我想弄清楚的是,如何在这个正则表达式中加入加号和括号.htaccess mod_rewrite:

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

,因为

([^/]+)

与另一个RewriteRule产生冲突。

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

“+”,“%5B”(即“[”),“%5D”(即“]”)

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

1 个答案:

答案 0 :(得分:0)

只是为了支持你可以使用的其他角色:

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]