这是我对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
我做错了什么?
答案 0 :(得分:1)
问题在于“即使我的浏览器仍将其显示为',也将URL编码为%27,这就是正则表达式不匹配的原因,因为字符组还没有包含%。
新的正则表达式看起来像
"^/riddim/([-'\./\+a-z\%0-9A-Z]+)/$"
并且像魅力一样工作!