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/(.+)/$" を使ってみましたが、うまくいきました。特殊文字として ' を使用する正規表現エンジンについて聞いたことがありませんが、(\' を使用して) char をエスケープしようとしましたが、それも失敗しました。

lighttpd は Web サーバー上で実行されており、私のコンピューターでは 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 に答える