0

这是我的 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。我什至尝试转义字符(使用:\'),尽管我从未听说过使用 ' 作为某些特殊字符的正则表达式引擎,但这也失败了。

lighttpd 在网络服务器上运行,在我的计算机上我使用 XAMPP 和 apache,我在那里设置了相同的正则表达式/规则,它工作得很好:

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

我究竟做错了什么?

4

1 回答 1

1

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

新的正则表达式看起来像

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

并且像魅力一样工作!

于 2012-09-13T00:45:28.500 回答