使用'in regex的lighttpd mod_rewrite不起作用

时间:2012-09-12 19:42:28

标签: regex apache mod-rewrite lighttpd

这是我对lighttpd的mod_rewrite规则:

url.rewrite-once = (
    "^/label/([-'\./\+a-z0-9A-Z]+)/$" => "/index.php?page=label&label=$1",
    "^/riddim/([-'\./\+a-z0-9A-Z]+)/$" => "/index.php?page=riddim&riddim=$1",
    "^/([a-z]+)$" => "/index.php?page=$1",
    "^/(!?pma)([a-z]+)/?$" => "/index.php?page=$1"
)

问题是角色'(39 .d)以某种方式破坏链接,我得到404错误。

/riddim/Some+Thing+Here+9.38/ --> works, page is shown
/riddim/Someone's+Stuff+Here/ --> fails, page not found 404 error

我已经尝试过使用“^ / riddim /(.+)/$”并且它有效,所以我猜'正在打破链接/ mod_rewrite。 我甚至尝试转义char(使用:\'),尽管我从来没有听说过使用'作为一些特殊字符的正则表达式引擎,但也失败了。

lighttpd正在web服务器上运行,在我的计算机上我正在使用带有apache的XAMPP,我在那里设置了相同的正则表达式/规则并且它运行正常:

RewriteEngine on
RewriteRule ^/label/([-'\./\+a-z0-9A-Z]+)/$ /index.php?page=label&label=$1
RewriteRule ^/riddim/([-'\./\+a-z0-9A-Z]+)/$ /index.php?page=riddim&riddim=$1
RewriteRule ^/([a-z]+)$ /index.php?page=$1

我做错了什么?

1 个答案:

答案 0 :(得分:1)

问题在于“即使我的浏览器仍将其显示为',也将URL编码为%27,这就是正则表达式不匹配的原因,因为字符组还没有包含%。

新的正则表达式看起来像

 "^/riddim/([-'\./\+a-z\%0-9A-Z]+)/$"

并且像魅力一样工作!