1

LiteSpeed が mod_rewrite ルールを apache2 と同じように評価しないという問題があります

http://example.com/page-nameを $_SERVER['REQUEST_URI'] でhttp://example.com/index.php/page-nameに書き換える mod_rewrite 設定の php ルーティング システムがあります。これはうまくいきます。

ex http://example.com/generate-thumbnail?uri=/images/thumbnails/1.jpgという画像 URI からサムネイルを生成する URI を追加しました。この URL は、キャッシュを有効にするためにhttp://example.com/images/thumbnail/1.jpgに保存されるサムネイル画像を生成します。

次のステップは、画像がhttp://example.com/images/thumbnail/1.jpgにあるかどうかをチェックし、そうでない場合はhttp://example.com/generate-thumbnail?uri=/images/thumbnails/を実行する正規表現です。 1.jpgを使用して、新しいサムネイルを生成します。

以下の .htaccess ファイルは apache2 では問題なく動作しますが、LiteSpeed を実行する私のホスティング サービスでは動作しません。LiteSpeed では、最初の書き換えルールのみが評価されるため、http ://example.com/generate-thumbnail?uri=/images/thumbnails/1.jpgが存在しない場合、サーバーはファイルhttp://exampleを探すように見えます。正しい URL http://example.com/index.php/generate-thumbnail?uri=/images/thumbnails/1.jpgになる最後の書き換えルールを評価する代わりに、 .com/generate-thumbnailを使用します。

apache2はこれを正しく取得しますが、LiteSpeedでは取得しません。なぜですか?

file_that_exists.php が実際のファイルである場所に変更するRewriteRule (.*) /generate-thumbnail?uri=$1 [L]と、LiteSpeed ですべて正常に動作します。RewriteRule (.*) /file_that_exists.php?uri=$1 [L]

LiteSpeed にすべての書き換えルールを評価させるにはどうすればよいですか?

# Start the rewrite engine
RewriteEngine On

# Rewrite if post image was requested but is not cached, generate it
RewriteCond %{REQUEST_URI} ^/images/thumbnails/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) /generate-thumbnail?uri=$1 [L]

# Rewrite the page into the router
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
4

1 に答える 1

1

mod_rewrite もフラグ/generate-thumbnailのため、ルールで停止する必要があります。実際にルールも適用したい場合は、それを[LAST]削除してください。[L]index.php/

LiteSpeed は Apache との互換性を主張しているため、商用フォークであると推測できます。もしそうなら、私はそれがここでどのように転用できるのか理解できません。とにかく、others を有効にしRewriteLogて原因を見つけてください。

于 2011-06-09T23:14:44.863 に答える